Загрузка изображения с Alamofire в iOS - PullRequest
3 голосов
/ 01 мая 2019

Я пытаюсь загрузить изображение с помощью Alamofire, но, похоже, оно не загружается.

    Alamofire.upload(multipartFormData: { multipartFormData in
        multipartFormData.append(imgData, withName: "data", fileName: "\(Date().timeIntervalSince1970).jpg", mimeType: "image/jpg")
        multipartFormData.append(operaID.data, withName: "id")
    },
                     to: URL_CORDINATE)
    { (result) in
        switch result {
        case .success(let upload, _, _):

            upload.uploadProgress(closure: { (progress) in
                print("Upload Progress: \(progress.fractionCompleted)")
            })

            upload.responseJSON { response in
                print("Upload image response:", response.result.value)
            }

        case .failure(let encodingError):
            print("Error while uploading image:", encodingError)
        }

Я ожидаю увидеть загрузку изображения, однако, похоже, что с телом что-то не так (я должен передавать img и id в теле, а не в качестве параметров!)

Однако он работает в Почтальоне: https://i.stack.imgur.com/f0mUd.png

Ответы [ 3 ]

1 голос
/ 23 июня 2019

Вы можете попробовать это:

Alamofire.upload(
                multipartFormData: { multipartFormData in
                    multipartFormData.append(imgData!, withName: "img", fileName: "jpg", mimeType: "image/jpeg")
            },
                to: UPLOAD_IMAGE_URL,
                encodingCompletion: { (encodingResult) -> Void in
                    switch encodingResult {
                    case .success(let upload, _, _):
                        upload.responseJSON { response in
                            let result = response.data
                            do {
                                print("success")
                            }catch {
                                print("error")
                            }
                        }
                    case .failure(let encodingError):
                        print(encodingError)

                    }
            })
0 голосов
/ 02 мая 2019
        Alamofire.upload(multipartFormData: { multipartFormData in
            if let img = image, let imageData = img.jpegData(compressionQuality: 0.6) {
                multipartFormData.append(imageData, withName: imageName, fileName: "temp.jpg", mimeType: "image/jpg")
            }
            for (key, value) in parameter ?? [:] {
                if value is String || value is Int {
                    multipartFormData.append("\(value)".data(using: .utf8)!, withName: key)
                }
            }
        }, to: url, headers: headers, encodingCompletion: { encodingResult in
            switch encodingResult {
            case .success(let upload, _ , _ ):
                upload.responseJSON { response in
                    debugPrint(response)
                    if response.response?.statusCode == 200
                    {
                        if let jsonData = try? JSONSerialization.data(withJSONObject: response.result.value!, options: .prettyPrinted) {
                            print("Response: \n",String(data: jsonData, encoding: String.Encoding.utf8) ?? "nil")
                        }
                        success(response.result.value! as AnyObject)
                    }else
                    {
                        let res = response.result.value! as AnyObject
                        let msg = res["Message"] as? String
                        if msg != nil
                        {
                            failure(msg!)
                        }else
                        {
                            failure("")
                        }
                    }
                }
            case .failure(let encodingError):
                print(encodingError)
                failure(encodingError.localizedDescription)
            }
        })
0 голосов
/ 01 мая 2019

На первый взгляд, отсутствует метод HTTP: .post, а mimeType должен быть "image/jpeg", а не "image/jpg".

См. Это:

    Alamofire.upload(multipartFormData: { multipartFormData in
        multipartFormData.append(imgData, withName: "data", fileName: "\(Date().timeIntervalSince1970).jpg", mimeType: "image/jpeg")
        multipartFormData.append(operaID.data, withName: "id")
    },
    to: YOUR_URL_HERE,
    method: .post,
    encodingCompletion: { result in
        switch result {
        case .success(let upload, _, _):

            upload.uploadProgress(closure: { (progress) in
                print("Upload Progress: \(progress.fractionCompleted)")
            })

            upload.responseJSON { response in
                print("Upload image response:", response.result.value)
            }

        case .failure(let encodingError):
            print("Error while uploading image:", encodingError)
        }
    })

Isесть ли в журнале сервера указание на ошибку?Можете ли вы добавить точки останова к коду сервера и запустить его на локальном хосте, чтобы проверить, что у вас есть в вашем контроллере?

В случае, если конечной точкой сервера является http, укажите это в Info.plist:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>
...