将NSData转换为来自S3的PreSigned URL,Alamofire.upload(...)无法在iOS 8

时间:2016-04-13 12:36:14

标签: swift amazon-s3 ios8 alamofire

以下代码在iOS9上运行正常,但在iOS8上运行时失败,Amazon返回错误400.响应只包含标题:

  • 连接=关闭; “Content-Type”=“application / xml”;日期=“星期三, 2016年4月13日12:19:21 GMT“;服务器= AmazonS3; ...

NSData是一个图像,Content-Type是“image / png”,它告诉亚马逊不要将它存储为“二进制/八位字节流”。

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;
}

1 个答案:

答案 0 :(得分:1)

这家伙引导我回答:Other guy having similar issue.

事实证明,Alamofire经理会话中的HTTPAdditionalHeaders有我之前调用的标题,而Amazon S3在iOS 8上不喜欢这样。

因此我需要的是在使用.upload(...)函数之前清除标题。

Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders = [:];