【问题标题】:Swift - "Alamofire.upload" -> "AF.upload" issue with the Upload functionSwift - “Alamofire.upload” -> “AF.upload” 上传功能问题
【发布时间】: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' 在没有更多上下文的情况下不明确”

标签: swift alamofire


【解决方案1】:

Alamofire 5 在使用多部分表单编码时不再需要 encodingCompletion 闭包。相反,您可以使用在其他用例中看到的正常响应处理。例如:

AF.upload(multipartFormData: { data in
    // Build your multipart form.
}).responseDecodable(of: SomeType.self) { response in
    // Handle response.
}

【讨论】:

    猜你喜欢
    • 2019-03-30
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 2018-10-23
    • 1970-01-01
    相关资源
    最近更新 更多