1

Amazon 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);
}

このデリゲート メソッドを画像のアップロードに使用することはできましたが、ダウンロードには使用できないようです。ダウンロードの進行状況を追跡するには、他に何をする必要がありますか?

ありがとう

4

2 に答える 2

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

ドキュメントはこれについて少し沈黙していることがわかりました。

また、AWS iOS サンプルにもあまり良い例が含まれていません。実際、「ダウンロードのプログレスバーはあくまで目安です。プログレスバーを正確に反映させるには、まずファイルサイズを取得する必要があります」というコメントがありますが、その方法については手がかりがありません。

それで、getMetadataObjectRequest.debugDescriptionプロパティをいじってこの方法を見つけました。

お役に立てれば!

于 2014-04-12T13:36:19.380 に答える