亚马逊s3 ios下载进度条

时间:2013-06-04 08:09:06

标签: ios amazon-s3

我正在开发一个从亚马逊s3下载图片的iOS应用程序。我正在尝试跟踪图像下载的进度。

我无法启动-(void)request:(AmazonServiceRequest *)request didSendData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite委托方法。

这是我到目前为止设置委托方法的代码。

-(void) viewDidLoad
{
self.s3 = [[AmazonS3Client alloc] initWithAccessKey:ACCESS_KEY_ID withSecretKey:SECRET_KEY];
self.s3.endpoint = [AmazonEndpoints s3Endpoint:US_WEST_2];

NSString *key = [[NSString alloc] initWithFormat:@"path1/%@", uniqueID];

S3GetObjectRequest *downloadRequest = [[S3GetObjectRequest alloc] initWithKey:key withBucket: PICTURE_BUCKET];
[downloadRequest setDelegate:self];

MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.labelText = @"Loading Picture...";
S3GetObjectResponse *downloadResponse = [s3 getObject:downloadRequest];   
}

-(void)request:(AmazonServiceRequest *)request didSendData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite
{
NSLog(@"Bytes Written: %i", bytesWritten);
NSLog(@"Total Bytes Written: %i", totalBytesWritten);
NSLog(@"Total Bytes Expected to Write: %i", totalBytesExpectedToWrite);
}

我设法让这个委托方法用于上传图片,但似乎无法让它下载。我需要采取哪些不同的方式来跟踪下载进度?

由于

2 个答案:

答案 0 :(得分:3)

我在AWS上研究自己时发现了这一点,并认为我会发布一个答案。 -(void)request:(AmazonServiceRequest *)request didSendData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite 仅在按照名称发送数据时有效。

如果您对文件的大小有所了解(您可以设置某种服务器请求以在开始下载之前获取此信息,或者是否存在典型数量)。然后,您可以使用-(void)request:(AmazonServiceRequest *)request didReceiveData:(NSData *)data并继续通过调用@property将数据附加到NSMutableData [self.data appendData:data],然后测量self.data.length,返回到的字节数您的元数据大小估计,您可以将其转换为字节。

希望这有帮助!

答案 1 :(得分:1)

AdamG是对的。

-(void)request:(AmazonServiceRequest *)request didSendData:(long long)bytesWritten totalBytesWritten:(long long)totalBytesWritten totalBytesExpectedToWrite:(long long)totalBytesExpectedToWrite仅用于上传。

如果要跟踪下载进度,请使用:

-(void)request:(AmazonServiceRequest *)request didReceiveData:(NSData *)data

在这里,我不想添加一些我自己的合作。如果你想知道要下载的文件的大小,这是一个很好的方法。

S3GetObjectMetadataRequest *getMetadataObjectRequest = [[S3GetObjectMetadataRequest alloc] initWithKey:YOUR_KEY withBucket:YOUR_BUCKET]; S3GetObjectMetadataResponse *metadataResponse = [[AmazonClientManager s3] getObjectMetadata:getMetadataObjectRequest]; NSString *filesizeHeader = metadataResponse.headers[@"Content-Length"]; fileSize = [filesizeHeader floatValue];

我发现documentation对此有点沉默。

此外,AWS iOS Samples也不包含很好的例子。实际上,有一条评论说明“下载的进度条只是一个估计。为了准确反映进度条,你需要先检索文件大小”,但不知道如何去做。

所以,我通过弄乱getMetadataObjectRequest.debugDescription属性找到了这种方式。

希望这有帮助!