ios - Swift 5,具有多个主体参数的 multipart/form-data
问题描述
正如标题所示,我在使用 API 向服务器提交表单时遇到了问题。还有很多其他关于在 Swift 5 中将图像上传到服务器的帖子和教程,所以我目前有以下内容;
func request5(authToken: String, contextID: String, parameters: [String:Any], image: UIImage) {
func getBase64Image(image: UIImage, complete: @escaping (String?) -> ()) {
DispatchQueue.main.async {
let imageData = image.pngData()
let base64Image = imageData?.base64EncodedString(options: .lineLength64Characters)
complete(base64Image)
}
}
getBase64Image(image: image) { base64Image in
let boundary = "Boundary-\(UUID().uuidString)"
guard let url = URL(string: self.baseURL + contextID) else { return }
let jsonData = try? JSONSerialization.data(withJSONObject: parameters)
var body = ""
body += "--\(boundary)\r\n"
body += "Content-Disposition:form-data; name=\"post_picture_link\""
body += "\r\n\r\n\(base64Image ?? "")\r\n"
body += "--\(boundary)--\r\n"
let postData = body.data(using: .utf8)
var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = "POST"
urlRequest.httpBody = jsonData
let APIauthToken = "Bearer " + authToken
urlRequest.addValue(APIauthToken, forHTTPHeaderField: "Authorization")
urlRequest.addValue("application/json", forHTTPHeaderField: "Accept")
urlRequest.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in
do {
if let d = data {
let result = try JSONDecoder().decode(ProperResponseGen.self, from: d)
DispatchQueue.main.async {
self.response = result
self.hasFinished = true
}
} else {
print("No Data")
}
} catch {
print(error)
}
}.resume()
}
}
在大多数情况下(据我所知),所有这些都很好,因为它可以在要提交的设置中包含图像和身体参数。问题是,正如您可能知道的那样,当我按照上面的方式编写它时,我有两个数据变量,postData 和 jsonData,它们都包含我需要的完整表单数据提交的单独部分。
为简单起见,假设 API 端点需要两个主体键;“post_picture_link”和“post_caption”,post caption被封装在传递给函数的参数变量中。
如何将它们组合成一个 httpBody?
解决方案
推荐阅读
- python - Spark3:无法使用 spark sql 命令查看配置单元数据库和表
- sql - SQL Server:如何计算年龄组的计数(*)
- javascript - 登录后Reactjs重定向到受保护的页面在身份验证后不起作用
- r - 是否有可能有一个加载条或微调器,该工作需要在闪亮的情况下运行?
- linux - 如何完全卸载 eclipse 基本(ubuntu)?
- python - 查询rpyc中的多个客户端连接
- symfony - 过滤/排序具有多个变量的数组
- google-cloud-platform - OAuth 同意屏幕的待定开发人员操作
- google-bigquery - 在 Big Query 中从 Adwords 转移到 Google Ads API
- python - 如何使用布局解析器将两个块图像合并为一个