以下代码在ios9上运行良好,但在ios8上运行时失败,amazon返回错误400。响应仅包含标题:
connection=close;“content type”=“应用程序/xml”;date=“wed,
2016年4月13日格林尼治时间12:19:21;服务器=亚马逊3;…
nsdata是一个图像,内容类型是“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;
}
最佳答案
这家伙引导我找到答案:Other guy having similar issue.
结果发现,alamofire的manager会话中的httpadditionalheaders有我以前调用的头,amazon s3不喜欢ios 8上的头。
因此,我只需要在使用.upload(…)函数之前清除标题。
Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders = [:];
关于swift - 将NSData与来自S3的PreSigned URL保持一致,Alamofire.upload(...)无法在iOS 8上运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36598597/