使用 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.append
在jpegData
末尾的闭包内?
【参考方案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 在参数中发布文件?