开发者社区> 问答> 正文

android okhttp 模拟网页只传oss 有问题,请管理员看一下

android okhttp 模拟网页只传oss 有问题,请管理员看一下


android使用okhttp 上传图片到oss有问题
help.aliyun.com/document_detail/26769.html?spm=5176.doc26699.6.181.MB64Km


方式1:其中addformdatapart省略了(实际我是传递过去的)
RequestBody body = new MultipartBody.Builder()
        .setType(MultipartBody. FORM)
        .addFormDataPart( "key" ,key)
         // [font='宋体']这里 addFormDataPart [font='宋体']多个参数
[font='宋体']        .addFormDataPart( "file" , file.getName() ,
                RequestBody. create(MediaType. parse( "image/png") , file))

        .build() ;
这个情况返回

<?xml version="1.0" encoding="UTF-8"?>
<Error>
  <Code>MalformedPOSTRequest</Code>
  <Message>The body of your POST request is not well-formed multipart/form-data</Message>
  <RequestId>57329DF4E36BDF822A9050D6</RequestId>
  <HostId>img.test.koolink.com</HostId>
</Error>


情况2
RequestBody body = new MultipartBody.Builder()
        .setType(MultipartBody. FORM)

        .addFormDataPart( "file" , file.getName() ,
                 RequestBody. create(MediaType. parse( "image/png") , file))
        .addFormDataPart( "key" ,key)
         // [font='宋体']这里 addFormDataPart [font='宋体']多个参数
[font='宋体']        .build() ;
返回结果:



<?xml version="1.0" encoding="UTF-8"?>
<Error>
  <Code>InvalidArgument</Code>
  <Message>The bucket POST must contain the specified 'key'. If it is specified, please check the order of the fields</Message>
  <RequestId>57329EB8E36BDF822A90AC3F</RequestId>
  <HostId>img.test.koolink.com</HostId>
  <ArgumentName>key</ArgumentName>
  <ArgumentValue></ArgumentValue>
</Error>




很奇怪,但是我在window上面,使用postman,按照这些参数去提交,可以成功上传。


为什么用android端的okhttp就不可以呢?


我使用额okhttp是okhttp-3.2.0.jar,okio-1.8.0.jar。




我自己用原始java的servlet上传文件写了个接口,用上面的2中方式都可以拿到图片和键值对。



展开
收起
永正 2016-05-11 10:59:07 10275 0
2 条回答
写回答
取消 提交回答
  • 回 1楼shinenuaa的帖子
    好的,我现在之前请求body的组装,我用postman可以,但是我用okhttp的api,可以做到这样的组装吗?还是要我自己一个个字符串拼凑?

    我这样拼凑,发送过去,可以,但是文件怎么传?
    MediaType mediaType = MediaType.parse("multipart/form-data; boundary=---011000010111000001101001");
            RequestBody body = RequestBody.create(mediaType,
                    "-----011000010111000001101001" +
                    "\r\n" +
                    "Content-Disposition: form-data; name=\"key\"" +
                    "\r\n\r\n" +
                    "key\r\n" +
                    "-----011000010111000001101001--");

    -------------------------

    Reandroid okhttp 模拟网页只传oss 有问题,请管理员看一下
    我已经找到问题所在了,我修改了okhttp3.2的源码,原来是okttp拼凑body的key值时候,有个地方的\r\n不对,晚点我上传代码
    2016-05-11 22:34:31
    赞同 展开评论 打赏
  • 这个是你组装的post data里面没有key .这个你可以参照一下这个例子, https://help.aliyun.com/document_detail/26768.html 的post 格式写一下
    2016-05-11 19:46:03
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载