如何在 multiformData 的 alamofire 中上传文件?
Posted
技术标签:
【中文标题】如何在 multiformData 的 alamofire 中上传文件?【英文标题】:how to upload file in alamofire in multiformData? 【发布时间】:2020-11-08 17:07:56 【问题描述】:我需要上传一张我尝试过的带有 multipart/form-data 的图片:
static func uploadFile(image: UIImage?, parameters:Parameter,onResponse:@escaping(_ result:Parameter)-> (),onFailure:@escaping(_ error:Error)->())
let url = "ip address"
let imageData = image?.jpegData(compressionQuality: 0.7)
let headers: HTTPHeaders = [
"Authorization": TOKEN!
]
Alamofire.upload(multipartFormData: (multipartFormData) in
multipartFormData.append("\(parameters.toJSON())".data(using: String.Encoding.utf8)!, withName: "entity")
if let data = imageData
multipartFormData.append(data, withName: "mp3")
, usingThreshold: UInt64.init(), to: url, method: .post, headers: getHeaders()) (result) in
switch result
case .success(let upload, _, _):
upload.responseJSON response in
print("Succesfully uploaded",response.error)
if let err = response.error
return
case .failure(let error):
print("Error in upload: \(error.localizedDescription)")
我需要发送实体模型和图像。但我必须将图像作为 formData 发送,而不是在正文中。
注意:发送带有“文件”键的图像和带有“实体”键的类
我无法快速解决它....
错误:
Succesfully uploaded Optional(Alamofire.AFError.responseSerializationFailed(reason: Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(error: Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo=NSDebugDescription=Invalid value around character 0.)))
【问题讨论】:
你既没有打电话给onResponse
,也没有打电话给onFailure
。您是否为了简化代码 sn-ps 而删除了它?或者你真的没有调用这些闭包吗?是网络请求不成功还是你没有调用闭包的问题。
最后,如果您不能 100% 确定请求是否正确,我建议使用 Charles 或 WireShark 等工具来观察请求并确保其格式正确。例如。 parameters.toJSON()
的字符串插值很容易导致问题,例如,如果toJSON
已经返回了Data
。如果没有看到 toJSON
的方法签名,我们无法对此发表评论...
感谢 Rob 回答我。我将控制台内容放在我的 post.cheek 中,但其中没有明确的数据。我有 case .success 和 case 。失败不正确吗?网络请求成功。
让我向您解释更多。服务器端希望我在正文请求中有一个键名为“entity”的类,以及键名为“file”的图像。完毕。你是怎么做到的?
ouhhhh 最后...我有两个问题。 1. 用密钥和文件名附加文件是正确的我忘记了文件名。 2.parameter.ToJson() 不正确。 ToJsonString() 是正确的。抢张贴这些提示我会投票给你。谢谢
【参考方案1】:
先读取 cmets。
即使在文件上传前一步设置了文件名,也不要忘记添加文件名。
尝试使用 ToJsonString() 而不是 ToJson()
【讨论】:
以上是关于如何在 multiformData 的 alamofire 中上传文件?的主要内容,如果未能解决你的问题,请参考以下文章