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

出现错误:使用 Alamofire.playground 时没有这样的模块“Alamofire”

var 请求:Alamofire.Request?使用未声明类型的 Alamofire