我正在使用AFNetworking和AFAmazonS3Client将文件上传到 Amazon S3。我遍历了一组文件,并且所有文件都按预期成功上传到了 S3 服务器,但是在上传期间,每个不应该存在的文件都添加了额外的内容。例如,添加到名为 kmeans.sh 的文件中的文本如下所示:
--Boundary+0xAbCdEfGbOuNdArY
Content-Disposition: form-data; name="file"; filename="kmeans.sh"
Content-Type: application/octet-stream
这种内容出现在每个文件的顶部。我的上传方法如下:
NSMutableURLRequest *request = [self
multipartFormRequestWithMethod:method
path:destination
parameters:parameters
constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:data
name:@"file"
fileName:[fileURL.path lastPathComponent]
mimeType:self.mimetype];
}];
我在这里做错了什么,向我的文件添加了额外的信息?我真的很不知所措,我很感激我可以尝试的任何建议。
更新: 最初我按照马特的建议做了,但我使用了 PUT 方法而不是 POST。今天我下载了最新版本的 AFAmazonS3Client 并尝试使用以下方法上传带有 PUT 和 POST 的文件:
postObjectWithFile:(NSString *)path destinationPath:(NSString *)destinationPath parameters....
putObjectWithFile:(NSString *)path destinationPath:(NSString *)destinationPath parameters....
对于上传到存储桶 objcs3 和前缀“Site3/hei/”的文件“Lima1996.pdf”,stringToSign 看起来像:POST
multipart/form-data; boundary=Boundary+0xAbCdEfGbOuNdArY
Thu, 06 Jun 2013 00:37:04 GMT
/objcs3/Site3/hei/Lima1996.pdf
请求看起来像:
auth: {
"Accept-Language" = "en;q=1, nb;q=0.9";
Authorization = "removed";
"Content-Length" = 915478;
"Content-Type" = "multipart/form-data; boundary=Boundary+0xAbCdEfGbOuNdArY";
Date = "Thu, 06 Jun 2013 00:37:04 GMT";
"User-Agent" = "connectCloudTest/1.0 (Mac OS X Version 10.8.4 (Build 12E55))";
}
一切看起来都不错,但是当我使用 POST 方法上传文件时,我不断收到错误消息
Upload failed Expected status code in (200-299), got 405 (-1011)
虽然使用 PUT 方法会导致上一个错误,即上传成功但内容与原始问题中的额外标题信息一样乱码。非常感谢您的建议!
谢谢你的帮助!干杯,特隆德