- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 AFNetworking 上传文件和AFAmazonS3Client到亚马逊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];
}];
我在这里做错了什么,向我的文件添加了额外的信息?我真的不知道如何解决这个问题,并且我很感谢我可以尝试的任何建议。
更新:最初我按照 Matt 的建议做了,但我使用了 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 如下所示: 发布
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 方法会导致之前的错误,即上传成功,但内容因额外的 header 信息而出现乱码,如原始问题所示。非常感谢您的建议!
感谢您的帮助!干杯,特隆德
最佳答案
通过替换AFAmazonS3Client中的putObjectWithMethod
,我成功上传了我的文件,没有任何额外的 header 。与:
(void)putObjectWithMethod:(NSString *)method
file:(NSString *)filePath
destinationPath:(NSString *)destinationPath
parameters:(NSDictionary *)parameters
progress:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress
success:(void (^)(id responseObject))success
failure:(void (^)(NSError *error))failure
{
NSMutableURLRequest *filerequest = [NSMutableURLRequest requestWithURL:[NSURL fileURLWithPath:filePath]];
[filerequest setCachePolicy:NSURLCacheStorageNotAllowed];
NSURLResponse *response = nil;
NSError *error = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:filerequest returningResponse:&response error:&error];
if (data && response) {
NSMutableURLRequest *request = [super requestWithMethod:@"PUT" path:destinationPath parameters:nil];
[self authorizeRequest:request withPath:destinationPath];
[request setHTTPBody:data];
AFHTTPRequestOperation *requestOperation = [self HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (success) {
success(responseObject);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (failure) {
failure(error);
}
}];
[requestOperation setUploadProgressBlock:progress];
[self enqueueHTTPRequestOperation:requestOperation];
}
}
我不知道为什么我的 POST 方法从来没有工作过,但是使用 PUT 一切都工作得很好。干杯,特隆德
关于cocoa - AF网络上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16926165/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!