Как загрузить изображение на aws предварительно подписанный URL-адрес в виде составных данных с помощью Alamofire 5? - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь загрузить изображение на предварительно подписанный URL AWS. Я попробовал с Alamofire 5 метод загрузки, который принимает multipartData. Я получаю ошибку 403 при многокомпонентной загрузке Alamofire 5.

Когда я пытаюсь с URLSession, он работает правильно.

/// Working code

        var request: URLRequest = URLRequest(url: requestURL)
        request.httpMethod = "PUT"
        request.httpBody = image
        request.setValue("image/jpeg", forHTTPHeaderField: "Content-Type")
        let tasksession: URLSessionDataTask = session.dataTask(with: request, completionHandler: { (response, urlResp, error) in
            if let data: Data = response {
                do {
                    let json: [String: Any]? = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
                    debugPrint("json \(json)")
                }
                catch {
                    debugPrint("error \(error)")
                }
            }



            print(response ?? "response nil")
            print(error ?? "response nil")
        })
        tasksession.resume()

То же самое, когда я пытаюсь с AF 5, он не работает

// Не рабочий код.

 AF.upload(multipartFormData: { (multiPart) in

            multiPart.append(imageData, withName: "file", fileName: "image.jpg", mimeType: "image/jpeg")
            }, to: url, method: .put, headers: ["Content-Type": "image/jpeg"],
                                                  ])
        .uploadProgress(queue: .main, closure: { progress in
                    //Current upload progress of the file
                    print("Upload Progress: \(progress.fractionCompleted)")
                })
                .responseJSON(completionHandler: { data in
                    let json: [String: Any]? = data as? [String: Any]
                    debugPrint("upload complete json \(data)")
            })

Может кто-нибудь сказать, почему он не работает с многочастной загрузкой с Alamofire 5, многочастная загрузка работает в Android.

1 Ответ

0 голосов
/ 28 января 2020
Alamofire.upload(multipartFormData: { (multipartFormData) in
            multipartFormData.append(imageData, withName: "file", fileName: "image.jpg", mimeType: "image/jpeg")
            //Any Post Params if you have.
            for (key, value) in parameters {
                multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key)
            }
        }, to:uploadUrlStr) //uploadUrlStr: upload url in your case
        { (result) in
            switch result {
            case .success(let upload, _, _):
                upload.uploadProgress(closure: { (progress) in
                    print("Uploading")
                    print(CGFloat(progress.fractionCompleted * 100))
                })

                upload.responseJSON { response in
                    print("Upload Finished")
                    guard let resultValue = response.result.value else {
                        NSLog("Result value in response is nil")
                        return
                    }

                }

            case .failure(let encodingError):
                print(encodingError.localizedDescription)
            }
        }

Это работает для меня.

...