将文件从iOS上传到Amazon S3

时间:2014-05-18 18:00:35

标签: ios amazon-web-services amazon-s3

我尝试将使用UIImagePickerController录制的短视频上传到Amazon S3。我正在关注亚马逊示例代码,这似乎很简单,但我的文件没有出现在我的文件夹中。

我记录了委托方法,奇怪的是totalBytesWritten小于totalBytesExpected。

这是我的代码:

AmazonS3Client *s3 = [[AmazonS3Client alloc] initWithAccessKey:AWS_ACCESS_KEY withSecretKey:AWS_SECRET_KEY];
S3PutObjectRequest *por = [[S3PutObjectRequest alloc] initWithKey:@"test.mov" inBucket:@"mybucket"];
por.contentType = @"video/quicktime";
NSData *videoData = [NSData dataWithContentsOfURL:videoURL];
por.data = videoData;
por.delegate = self;
[s3 putObject:por];

获得任何响应的唯一委托方法是报告字节的唯一方法。其他人都没有被召唤。

更新

如果文件非常小,它实际上是有效的。一个110000字节的文件上传正常。它每次停止在196608字节。如果文件小于上传的文件。

1 个答案:

答案 0 :(得分:2)

所以这里有两个问题。由于文件很大,我改用S3TransferManager 我还设定了至关重要的终点。最终代码是:

AmazonS3Client *s3 = [[AmazonS3Client alloc] initWithAccessKey:AWS_ACCESS_KEY withSecretKey:AWS_SECRET_KEY];
s3.endpoint = [AmazonEndpoints s3Endpoint:US_WEST_2];
S3TransferManager *transferManager = [S3TransferManager new];
transferManager.s3 = s3;
transferManager.delegate = self;
s3.endpoint = [AmazonEndpoints s3Endpoint:US_WEST_2];
NSData *videoData = [NSData dataWithContentsOfURL:_videoURL];
[transferManager uploadData:videoData bucket:@"bucketname" key:@"test.mov"];