繁体   English   中英

亚马逊s3 ios下载进度条

[英]amazon s3 ios download progress bar

我正在开发一个从亚马逊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);
}

我设法让这个委托方法用于上传图像,但似乎无法让它下载。 我需要做些什么来跟踪下载进度?

谢谢

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

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

希望这可以帮助!

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];

我发现文档对此有点保持沉默。

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

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

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM