1

S3TransferManager を使用して、S3 サーバーに画像をアップロードすることができました。今、私は再び画像をダウンロードしようとしています。しかし、私はこのログメッセージを受け取り続けます。解決方法がわかりません。ファイルパスに問題があるようで、一時ファイルが作成されます。

[S3TransferManager filePath:]|531|File created to persist transfer request: /private/var/mobile/Applications/9CD874D1-2605-4067-949C-D373E917B85E/tmp/S3TransferDownloadRequests/000000000-individualframes-20131111T181238Z.plist

これが私が使用しているコードです。

- (void) downloadFramesFromURLS:(NSMutableArray *) urls {

    for (NSString *string in urls) {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString *filePath = [documentsDirectory stringByAppendingPathComponent:string];
        S3GetObjectRequest *req = [[S3GetObjectRequest alloc] initWithKey:string withBucket:@"individualframes"];
        req.targetFilePath = filePath;
        req.contentType =  @"image/jpeg";
        req.delegate = self;
        [self.downLoadManager download:req];
    }

}

[self.s3 getObject:req];ダウンロードの代わりに実行すると問題なく[self.downLoadManager download:req];動作しますが、アップロードと同じように転送マネージャーを使用したいと思います

更新: これは、デリゲート メソッドで使用しているコードの簡略化されたバージョンです。ダウンロードが完了したら、ダウンロードしたデータ ファイルを使用して、UIImage に戻します。転送マネージャーを使用すると、response.body が nil になります。

- (void) request:(AmazonServiceRequest *)request didCompleteWithResponse:(AmazonServiceResponse *)response {
            NSData *data = response.body;
            UIImage *img = [UIImage imageWithData:data];
            // further processing goes on here
}
4

1 に答える 1

1

表示されているログ メッセージは、S3TransferManager が一時メタデータ ファイルを作成し、転送が一時停止または中断された場合に再開できるようにするためです。このメタデータ ファイルは、ダウンロードの完了時に削除されます。実際のファイルは、指定した targetFilePath にダウンロードする必要があります。気になるのはログ行だけですか、それともファイルが targetFilePath にダウンロードされませんでしたか?

このブログ投稿では、最新の S3TransferManager 機能について説明しており、役に立つかもしれません: http://mobile.awsblog.com/post/Tx2W0CZSJXOFBEU/Download-Pause-and-Resume-with-the-S3TransferManager-for-iOS

于 2013-11-18T19:48:44.787 に答える