ПОСТАВЬТЕ NSData к предварительно подписанному URL-адресу из S3 с Alamofire.upload(), не работающим на iOS 8

Следующий код отлично работает на iOS9, но при запуске на iOS8 происходит сбой, и Amazon возвращает ошибку 400. Ответ содержит только заголовки:

  • Соединение = закрыть; "Тип контента" = "приложение/xml"; Дата = "Среда, 13 апреля 2016 г., 12:19:21 по Гринвичу"; Сервер = AmazonS3; ...

NSData — это изображение, а Content-Type — «image/png», что говорит Amazon не хранить его как «двоичный/октетный поток».

func uploadFile(locationURL: String, http: Alamofire.Method, mimeType: String, fileData: NSData) -> ApiCaller {
    Alamofire.upload(http, locationURL, headers: ["Content-Type": mimeType], data: fileData)
        .progress { bytesWritten, totalBytesWritten, totalBytesExpectedToWrite in
            if let uploadProgress = self.uploadProgress {
                uploadProgress(bytesWritten, totalBytesWritten, totalBytesWritten);
            }
        }
        .response { (req, res, json, error) in
            self.returnResult(req, res: res, json: json, error: error, tag: 0)
            return();
        }
    return self;
}

person Mvj    schedule 13.04.2016    source источник


Ответы (1)


Этот парень привел меня к ответу: У другого парня похожая проблема.

Оказывается, HTTPAdditionalHeaders в сеансе менеджера в Alamofire содержали заголовки из моих предыдущих вызовов, и Amazon S3 не понравилось это в iOS 8.

Поэтому все, что мне было нужно, это очистить заголовки перед использованием функции .upload(...).

Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders = [:];
person Mvj    schedule 13.04.2016
comment
По состоянию на 17 марта текущий синтаксис Alamofire.SessionManager.default.session.configuration.httpAdditionalHeaders = [:] - person Guig; 24.03.2017