ios上传文件到亚马逊S3
我正在研究一个需要能够将文件上传到亚马逊S3的ios应用程序,但我遇到了一些问题。 该函数管理在s3存储桶中创建正确的密钥或路径,但文件本身不会上传到其中。 下面是我尝试过的选项中的1个的代码
if (self.s3 == nil) {
self.s3 = [[AmazonS3Client alloc] initWithAccessKey:[Config getS3Key] withSecretKey:[Config getS3Secret]] ;
}
[self performSelectorInBackground:@selector(processBackgroundThreadUploadInBackground:)
withObject:params];
}
- (void)processBackgroundThreadUploadInBackground:(NSMutableDictionary *)params
{
S3PutObjectRequest *por = [[S3PutObjectRequest alloc] initWithKey:@"staging/videos/" inBucket:@"aaa.aaaaa.com"];
por.contentType = @"video/mp4";
por.data = [NSData dataWithContentsOfURL:[NSURL URLWithString:[params valueForKey:@"takeurl"]]];
// por.contentType = @"image/png";
// por.data = [params valueForKey:@"takeimage"];
S3PutObjectResponse *putObjectResponse = [self.s3 putObject:por];
[self performSelectorOnMainThread:@selector(showCheckErrorMessage:)
withObject:putObjectResponse.error
waitUntilDone:NO];
}
这会在s3中的存储桶中创建关键路径staging / videos /,但该文件不存在。 我也试过这个图像文件。 我已经检查过,以确保我试图推高的数据不是零。 我从服务器获得的xml响应表明内容长度为0。 我也尝试了从s3 sdk获得相同结果的多部分方法。 任何人都可以看到我做错了什么?
我对这个回应显然真的很晚,但为了以防其他人在将来出现这个问题,你就错误地构建了你的请求。
通过做:
S3PutObjectRequest *por = [[S3PutObjectRequest alloc] initWithKey:@"staging/videos/" inBucket:@"aaa.aaaaa.com"];
在你的密钥的末尾有一个反斜杠,你正在创建一个文件夹,而不是一个文件。 您需要结束包含后缀的文件名,例如ex @"staging/videos/video.mp4"
。