Swift - "Alamofire.upload" -> "AF.upload" проблема с функцией загрузки - PullRequest
0 голосов
/ 10 июля 2020

Я обновил под Alamofire 5.0 более старую версию,

Из Руководства по миграции https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%205.0%20Migration%20Guide.md

"API MultipartFormData изменился, и методы загрузки верхнего уровня для создания и загрузки MultipartFormData были обновлены, чтобы соответствовать другим API запросов, поэтому больше нет необходимости иметь дело с Результатом многостраничного кодирования. "

У меня написана функция ниже, Я не могу переписать это в новой версии. Может ли кто-нибудь мне помочь в этом отношении?

примечание: Я думаю, мне нужно изменить "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")
            }
        })
    }

1 Ответ

1 голос
/ 10 июля 2020

Alamofire 5 устранил необходимость в закрытии encodingCompletion при использовании кодирования составной формы. Вместо этого вы можете использовать обычную обработку ответа, как в других случаях использования. Например:

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