ПОСТЪВЕТЕ NSData към PreSigned URL от S3 с Alamofire.upload() не работи на iOS 8

Следният код работи добре на iOS9, но когато се изпълнява на iOS8, той се проваля и Amazon връща грешка 400. Отговорът съдържа само заглавки:

  • Връзка = близо; "Content-Type" = "приложение/xml"; Дата = "сряда, 13 април 2016 г. 12:19:21 GMT"; Сървър = 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
От 3/17 текущият синтаксис е Alamofire.SessionManager.default.session.configuration.httpAdditionalHeaders = [:] - person Guig; 24.03.2017