Загрузка изображения с помощью Alamofire не удалась - PullRequest
1 голос
/ 02 мая 2019

Я пытаюсь сделать POST-запрос к конечной точке с параметрами тела img (изображение) и id (может быть любым числом).

Это работает в Почтальоне (сервер никогда не отвечает с ошибкой /Успех, хотя, если id отсутствует):

enter image description here

Однако на стороне приложения для iOS:

class func postPreviewImage(operaID: Int, image: UIImage, completion: @escaping () -> Void) {
    let URL_CORDINATE = "http://artaugmentedreality.com/api/postpreview/"
    print("Trying to post a preview of opera with ID:", operaID)

    guard let imgData = image.jpegData(compressionQuality: 0.2) else {
        print("Error while retrieving image data")
        return
    }

    Alamofire.upload(multipartFormData: { multipartFormData in
        multipartFormData.append(imgData, withName: "img", fileName: "\(Date().timeIntervalSince1970).jpg", mimeType: "image/jpeg")
        multipartFormData.append(operaID.data, withName: "id")
    },
                     to: URL_CORDINATE,
                     method: .post)
    { (result) in
        print("Result of Alamofire call is", result)

        switch result {
        case .success(let upload, _, _):

            upload.uploadProgress(closure: { (progress) in
                print("Upload Progress: \(progress.fractionCompleted)")
            })
        case .failure(let encodingError):
            print("Error while uploading image:", encodingError)
        }
    }
}

extension Int {
    var data: Data {
        var int = self
        return Data(bytes: &int, count: MemoryLayout<Int>.size)
    }
}

он загружается, но сервер каким-то образом его не получает.Может ли быть что-то не так в моем коде запроса?Я получаю код ошибки:

Error copying matching creds.  Error=-25300, query={
atyp = http;
class = inet;
"m_Limit" = "m_LimitAll";
ptcl = http;
"r_Attributes" = 1;
sdmn = "artaugmentedreality.com";
srvr = "artaugmentedreality.com";
sync = syna;
}

от Alamofire, возможно, потому что домен не HTTP.Тем не менее, я включил домен в список разрешенных доменов в info.plist:

enter image description here

Так что я не знаю, как перейти отсюда.

1 Ответ

2 голосов
/ 02 мая 2019

Вы отправляете параметр ID вместе с изображением. Поэтому попробуйте использовать кодировку utf8.

 multipartFormData.append(operaID.data(using: .utf8)!, withName: "id")
...