使用 Alamofire 上传多部分表单数据文件

Posted

技术标签:

【中文标题】使用 Alamofire 上传多部分表单数据文件【英文标题】:Multipart form-data file uploading using Alamofire 【发布时间】:2015-07-31 16:40:16 【问题描述】:

我看过this 或that 之类的问题之一,但它仍然无法正常工作。

我还有一个问题,我应该从函数multipartFormData.appendBodyPart 中输入什么fileURL 参数?

应该是从 PC 上获取图像的一种方式,还是必须将图像添加到 Images.xcassets 中?我应该在这里发送什么?

【问题讨论】:

请更清楚您的问题是什么。 你没看到图片有错误吗? 是的,但将您的问题包含在标题或正文中会有所帮助,而不是指望人们从图像中推断出来。 【参考方案1】:

您似乎需要解决三个问题。

    使用.POST 而不是POSTfileURL 必须是指向文件系统上文件的有效NSURL。您不能只使用文件名。 您正在使用responseString 序列化程序,但将闭包中的第三个参数命名为JSON。然后你让result 进入s 并尝试打印出来。 result 参数甚至在任何地方都不存在。相反,您应该print(JSON)

希望这有助于澄清一些事情。

【讨论】:

【参考方案2】:

尝试使用.POST 而不是POST


作为替代解决方案,上传编码文件并将其作为 POST 的参数发送。

// `data` is NSData
let base64String = data!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.allZeros)

let parameters = ["image_data": base64String] as [String: AnyObject]
Alamofire.request(.POST, "http://your-url.com", parameters: parameters)

这种方法的缺点是由于编码,数据会变大 %33。如果您有带宽问题,这可能不是一个好的解决方案。

【讨论】:

如何上传base64字符串数组? 有趣。如果数组长度不变,只需对多个参数执行相同操作即可。 你能检查一下我的这个问题吗? @G.Abhisek 我同意这些解决方案。使用 MultipartPostRequest 或者您可以在完成后将图像上传到 AWS S3 之类的东西,向服务器发送请求以检查来自 AWS S3 的 x、y、z id。但 MultipartPostRequest 仍然是最好的解决方案。

以上是关于使用 Alamofire 上传多部分表单数据文件的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire 多部分/表单数据上传请求中仅不发送图像

Alamofire - 多部分表单数据键:值

使用 Alamofire 和 BOX API 的多部分表单上传

上传多部分表单数据时如何观察uploadProgress? [复制]

使用多部分形式的 Swift IOS 进行流式上传

使用 alamofire 的多部分/表单数据