使用多行Swift字符串构建多部分表单数据不起作用

时间:2018-01-11 15:58:16

标签: swift cocoa-touch uikit

我有一个函数可以将多部分表单数据构建到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)--" 成功或失败之间产生差异的原因。

1 个答案:

答案 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
"""