oss表单直传,The body of your POST request is not well-formed multipart/form-data-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

oss表单直传,The body of your POST request is not well-formed multipart/form-data

2018-11-26 22:20:20 11815 3

平台:iOS
开发语言:Swift
网络库:Alamofire
问题描述:用Alamofire的post请求将本地文件上传到oss(policy、signature、accessId等都是每次使用由服务器重新生成的)大部分时候正常,有的时候会报错“The body of your POST request is not well-formed multipart/form-data”。贴上charles截包图(第一张为上传成功,第二张为上传失败),望大神解答~

<Code>MalformedPOSTRequest</Code> 
<Message>The body of your POST request is not well-formed multipart/form-data</Message> 
<RequestId>5BFBEE7594D2DCB3BE2A0A76</RequestId> 
<HostId>aijihui-dev.oss-cn-hangzhou.aliyuncs.com</HostId> 

取消 提交回答
全部回答(3)
  • 游客qndhtllmdgywa
    2020-04-27 19:38:20

    狗叼滴,拼凑body时前面多了一行空格导致报这个错误,让我找了一下午,我太难了

    1 0
  • beeplatform
    2019-07-17 23:16:33
        private func contentHeaders(withName name: String, fileName: String? = nil, mimeType: String? = nil) -> [String: String] {
            var disposition = "form-data; name=\"\(name)\""
            if let fileName = fileName { disposition += "; filename=\"\(fileName)\"" }
    
            var headers = ["Content-Disposition": disposition]
    //        if let mimeType = mimeType { headers["Content-Type"] = mimeType }
    
            return headers
        }

    我是直接修改源代码,把if let mimeType = mimeType { headers["Content-Type"] = mimeType }这行注释掉


    我是直接修改源代码,把 contentHeaders 方法里的 if let mimeType = mimeType { headers["Content-Type"] = mimeType } 这行注释掉

        private func contentHeaders(withName name: String, fileName: String? = nil, mimeType: String? = nil) -> [String: String] {
            var disposition = "form-data; name=\"\(name)\""
            if let fileName = fileName { disposition += "; filename=\"\(fileName)\"" }
    
            var headers = ["Content-Disposition": disposition]
    //        if let mimeType = mimeType { headers["Content-Type"] = mimeType }
    
            return headers
        }
    0 0
  • tt0817
    2019-07-17 23:16:33

    问题解决了,是因为在file域里面Content-Type在Content-Disposition之前,因此出现了该问题,oss这里是需要Content-Type在Content-Disposition之后才可以正常的。
    为什么Content-Type会在Content-Disposition之前,这是因为Alamofire处理表单域的时候是将Content-Disposition和Content-Type添加到一个字典中,然后遍历字典添加到表单域中的,但是由于字典是无序的,所以会出现有50%概率Content-Type在Content-Disposition之前。综合看了一下Alamofire源码,不建议直接修改源码,所以我自己用URLSession重写了个表单上传。
    希望能帮到遇到同一个坑的攻城狮们。
    1543456288477
    1543456282889
    1543456271700

    1 0
添加回答
相关问答

1

回答

关于 LEFT JOIN DimTable FOR SYSTEM_TIME AS OF 的异常求教!

2021-12-02 14:08:18 601浏览量 回答数 1

1

回答

What does a MySQL database contain?

2021-10-16 16:42:58 206浏览量 回答数 1

2

回答

How do you create a database in MySQL?

2021-10-16 16:44:25 200浏览量 回答数 2

1

回答

性能测试TPS中如何设置multipart/form-data类型的body

2019-10-24 19:28:00 321浏览量 回答数 1

0

回答

BUILDING REALTIME DATA PIPELINES WITH KAFKA CONNECT AND SPARK STREAMING

2018-07-29 00:44:13 701浏览量 回答数 0

0

回答

insecurity-In-Building-Automation-How-To-Create-Dark-Buildings-With-Light-Speed

2018-06-25 22:15:44 675浏览量 回答数 0

0

回答

Stream All Things--Patterns of Modern Data Integration

2018-06-17 17:37:11 930浏览量 回答数 0

1

回答

Linux 中 /usr/bin/time -f "%U" -a -o data/TestLog100.txt

2016-07-08 13:44:03 1594浏览量 回答数 1

1

回答

Linux 中 /usr/bin/time -f "%U" -a -o data/TestLog100.txt

2016-06-02 23:52:58 1703浏览量 回答数 1

1

回答

如何用shell查找mysql 的data目录位置

2016-02-06 15:35:28 1551浏览量 回答数 1
+关注
0
文章
2
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载