使用 Alamofire swift 4 上传文件

Posted

技术标签:

【中文标题】使用 Alamofire swift 4 上传文件【英文标题】:upload file with Alamofire swift 4 【发布时间】:2018-11-08 19:34:48 【问题描述】:

我正在尝试使用 Alamofire (swift 4.2) 上传图片,但在将图片转换为数据时出现此错误 调用中的额外参数“compressionQuality”

代码是

import Foundation
import SwiftyJSON
import Alamofire

class APIUpload 
    class func createPhoto(photo: UIImage, completion: @escaping (_ error:Error?, _ success: Bool)->Void)
        let url = "http://www.fb.test/photo.php"
        Alamofire.upload(multipartFormData:  (form: MultipartFormData) in
            let data = photo.jpegData(compressionQuality: 1.0)
                form.append(data:Data, withName:"photo",fileName:"photo.jpeg",mimeType:"image/jpeg")
            
        , usingThreshold: SessionManager.multipartFormDataEncodingMemoryThreshold, to: url, method: .post, headers: nil)  (result: SessionManager.MultipartFormDataEncodingResult) in
            switch result 
            case .failure(let error):
                print(error)
                completion(error, false)
            case .success(request: let upload, streamingFromDisk: _, streamFileURL: _):
                upload.uploadProgress(closure:  (progress: Progress) in
                    print(progress)
                )
                upload.responseJSON(completionHandler:  (response: DataResponse<Any>) in
                    switch response.result
                    case .failure(let error):
                        print(error)
                    case .success(let value):
                        let json = JSON(value)
                        print(json)
                        completion(nil, true)
                    
                )
            
        
    

错误 enter image description here

【问题讨论】:

我怀疑错误信息在这里有点误导。为什么form.appendjpegData 末尾的闭包内? 【参考方案1】:

jpegData的签名

func jpegData(compressionQuality: CGFloat) -> Data?

所以你需要

if let data = photo.jpegData(compressionQuality: 1.0)
      form.append(data:data, withName:"photo",fileName:"photo.jpeg",mimeType:"image/jpeg")

【讨论】:

以上是关于使用 Alamofire swift 4 上传文件的主要内容,如果未能解决你的问题,请参考以下文章

Swift 4:如何使用 Alamofire 在参数中发布文件?

使用 Alamofire 4 swift 3 上传图像

如何在 Swift 4 中使用 Alamofire 上传具有其他参数的多个图像

Swift - Alamofire - 从照片库上传文件

使用 Swift 3 和 Alamofire 上传文件

text Alamofire - 使用Swift 3上传文件