Alamofire multipartFormData 上传不发送数据
Posted
技术标签:
【中文标题】Alamofire multipartFormData 上传不发送数据【英文标题】:Alamofire multipartFormData upload doesn't send data 【发布时间】:2015-10-16 17:30:20 【问题描述】:我正在尝试使用 Alamofire 上传图像,但服务器未获取图像。 这是我上传的代码:
Alamofire.upload(Router.UpdateUserAvatar,
multipartFormData: (multipartFormData) -> Void in
let compressionQuality: CGFloat = 0.8
guard let imageData = UIImageJPEGRepresentation(image, compressionQuality) else
print("Unable to get JPEG representation for image \(image)")
callCompletion()
return
multipartFormData.appendBodyPart(data: imageData, name: ParameterKey.Avatar, mimeType: "image/jpeg")
, encodingCompletion: (encodingResult) -> Void in
switch encodingResult
case .Success(request: _, streamingFromDisk: _, streamFileURL: _):
finalResult = Result.Success(self)
callCompletion()
case .Failure(let errorType):
let error = errorType as NSError
finalResult = Result.failureForError(error, data: nil)
callCompletion()
)
【问题讨论】:
【参考方案1】:经过将近 4 个小时的研究,我发现 API 也需要文件名,这是我更改的行,一切正常。
multipartFormData.appendBodyPart(data: imageData, name: ParameterKey.Avatar, fileName: "avatar.jpg", mimeType: "image/jpeg")
【讨论】:
非常感谢您分享这个!它也适用于我。但是现在我有点困惑,为什么我需要给这个文件一个名字,因为我永远不会在服务器端使用它。可能一些服务器调整有助于appendBodyPart
在没有多余的fileName
参数的情况下工作?..
在我的情况下,这是因为我们在服务器端使用的库需要名称,即使我们不使用它。
Alamofire 4 中的音频文件怎么样? - 我尝试以这种形式发送音频文件:multipartFormData.append(audioLocalPath, withName: "file", fileName: "file", mimeType: "application/octet-stream") 但出现此错误:multipartEncodingFailed(Alamofire.AFError .MultipartEncodingFailureReason.bodyPartFileNotReachableWithError(file:///var/mobile/Containers/......./Documents/item.mp3, NSUnderlyingError=0x16049100 Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory" )) - 问题出在哪里? - 错误的请求或错误的音频路径?
@Saeid 对于您发布的错误Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"
,看起来问题出在音频路径以上是关于Alamofire multipartFormData 上传不发送数据的主要内容,如果未能解决你的问题,请参考以下文章
Alamofire(Swift 3):对成员“上传(..”)的模糊引用
Swift 3 的 ObjectMapper 和 Alamofire 问题 Alamofire 4 的 Alamofire 版本
导入 Alamofire 3.4 - 没有这样的模块“Alamofire”
Alamofire:responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.inputData