我有一个函数可以将多部分表单数据构建到Swift String
中,将该字符串转换为Data
,然后将该数据分配给我的变量URLRequest
' s {{ 1}}属性。当写为多行字符串时(内容为来自via httpBody
的JPEG UIImage
数据):
UIImageJPEGRepresentation
它不起作用,但通过多次附加组合来组装:
let body = """
--\(formDataBoundary)
Content-Disposition:form-data; name="file"; filename="image.jpeg"
Content-Type: image/jpeg
\(jpegData.base64EncodedString())
--\(formDataBoundary)--
"""
确实如此。有没有人解释为什么?我只对这两个实现进行评论和评论,这是我var body = "--\(formDataBoundary)\r\n"
body += "Content-Disposition:form-data; name=\"file\"; filename=\"image.jpeg\"\r\n"
body += "Content-Type: image/jpeg\r\n\r\n"
body += "\(jpegData.base64EncodedString())\r\n\r\n"
body += "--\(formDataBoundary)--"
成功或失败之间产生差异的原因。
答案 0 :(得分:1)
HTTP和MIME标题行由CRLF对(回车+换行符,\r\n
)终止,这就是您在
var body = "--\(formDataBoundary)\r\n"
// ...
多行字符串文字仅由换行符分隔, 你必须添加所需的CR字符:
let body = """
--\(formDataBoundary)\r
Content-Disposition:form-data; name="file"; filename="image.jpeg"\r
Content-Type: image/jpeg\r
\r
\(jpegData.base64EncodedString())\r
\r
--\(formDataBoundary)--\r
"""