如何在多部分 API 中发送 [String:Any] 字典?

Posted

技术标签:

【中文标题】如何在多部分 API 中发送 [String:Any] 字典?【英文标题】:How to send [String:Any] dictionary in multipart API? 【发布时间】:2019-06-04 06:07:42 【问题描述】:

我正在尝试使用带有 [String:Any] 参数的 Alamofire 发送多部分图像数据,我只能发布 [String:String] 参数

对于[String:String] 的行为类似于https://***.com/a/40440371/4466607

但现在我必须像这样发布: [ PayLoad ] 我必须使用 image 键发送图像,我已经在这样做了。

在邮递员中它工作正常

问题: 我如何在 Swift 中使用 Dictionary 类型 [String:Any] 发布图像 请帮忙

【问题讨论】:

【参考方案1】:

如果您的值是 Any 类型,请检查这可能对您有帮助。

for (key, value) in params 
  let paramsData:Data = NSKeyedArchiver.archivedData(withRootObject: value)
  formData.append(paramsData, withName: key)

【讨论】:

我已经这样做了,我需要将[String,Any] 类型的有效负载与我的图像一起发布 让 updateInfo: [String:Any] = ["email":usernameText] for (key, value) in updateInfo multipartFormData.append(key.data(using: .utf8)!, withName: value as!String) - 试试这段代码 不,您添加的数据有误,withName : key 我知道如何添加但无法以这种方式工作,请尝试然后发布【参考方案2】:

粗略的解决方案: 如果你坚持将Image数据放入字典,你可以将图像数据转换成Base64编码,然后将Base64字符串放入字典中。您将向服务器提交一个大的 JSON。我认为这不是一个好的解决方案。

更好的解决方案: 另一个用于提交图像数据的 WebApi,该 API 将返回上传的图像 URL,如 https://www.example.com/image1234.jpg,或者只返回最近可以嵌入到 URL 中的图像 ID,如“1234”。最后,您提交带有图像 URL 或 ID 的 JSON 数据,例如 "image":"https://www.example.com/image1234.jpg""image":1234

【讨论】:

不,我不想把图片放在字典里

以上是关于如何在多部分 API 中发送 [String:Any] 字典?的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动的多部分请求中发送对象列表?

如何发送 jpeg 的多部分响应

在多线程 HTTP 服务器中发送后,如何干净地关闭套接字?

VueJS:如何在多页面应用程序中使用路由来发送 url 查询参数?

Rails:如何在多部分/替代电子邮件中使用部分(HTML 和纯文本)

在多线程并发请求Api的场景中,如何控制每个线程的qps