Swift - “Alamofire.upload” -> “AF.upload” 上传功能问题
Posted
技术标签:
【中文标题】Swift - “Alamofire.upload” -> “AF.upload” 上传功能问题【英文标题】:Swift - "Alamofire.upload" -> "AF.upload" issue with the Upload function 【发布时间】:2020-07-10 04:30:12 【问题描述】:我已经从旧版本升级了 pod Alamofire 5.0,
来自迁移指南 https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%205.0%20Migration%20Guide.md
“MultipartFormData 的 API 发生了变化,创建和上传 MultipartFormData 的***上传方法已更新以匹配其他请求 API,因此不再需要处理多部分编码的 Result。”
我写了下面的函数,我无法在新版本中重写这个函数,有人可以在这方面帮助我吗?
注意: 我认为我需要更改“Alamofire.upload”->“AF.upload”,但它不足以解决问题,
func uploadPhoto(token:String, userID: String, data: Data, dataUrl: URL) -> Observable<AnyObject?>
return Observable<AnyObject?>.create( (observer) -> Disposable in
print(userID);
print(data);
do
let urlRequest = try URLRequest(url: ResourcePath.Upload.path + "/\(userID)" , method: .post)
Alamofire.upload(multipartFormData: (multipartData) in
multipartData.append(data, withName: "Filedata", fileName: dataUrl.absoluteURL.lastPathComponent, mimeType: "image/jpeg")
//append(dataUrl, withName: "Filedata", fileName: dataUrl.absoluteString, mimeType: "image/png")
, with: urlRequest, encodingCompletion: (result) in
switch result
case .success(let value, let t1, let t2) :
print(value)
value.responseData(completionHandler: (dataResponse) in
switch (dataResponse.result)
case .success(let value) :
print(value)
do
let jsonData = JSON(dictData)
print("Upload photo response: \(jsonData)")
observer.onNext(jsonData as AnyObject?)
observer.onCompleted()
catch
print(error)
observer.onError(error)
return
break
case .failure(let error) :
print(error)
observer.onError(error)
break
)
break
case .failure(let error) :
print(error)
observer.onError(error)
break
default:
break
)
catch
print(error)
observer.onError(error)
return Disposables.create
print("disposed")
)
【问题讨论】:
您希望有人重写您的代码而不自己尝试吗?我认为这不是一个好主意。 你试过用 AF.upload 代替 Alamofire.upload 吗? 我不知道如何进行更改 Af.upload 不起作用 我收到一个错误“表达式类型 'UploadRequest' 在没有更多上下文的情况下不明确” 【参考方案1】:Alamofire 5 在使用多部分表单编码时不再需要 encodingCompletion
闭包。相反,您可以使用在其他用例中看到的正常响应处理。例如:
AF.upload(multipartFormData: data in
// Build your multipart form.
).responseDecodable(of: SomeType.self) response in
// Handle response.
【讨论】:
以上是关于Swift - “Alamofire.upload” -> “AF.upload” 上传功能问题的主要内容,如果未能解决你的问题,请参考以下文章
Alamofire 4 swift 3 上传带有标题的 MultipartFormData 未发布
如何使用参数 swift 3.0 Alamofire 4.0 调用邮政服务?