2016-12-16 3 views
1

私はAWS Transfer Managerを使用して、多くのファイルをS3にバックアップしています。途中でバックアップが失敗することがあり、すべてのファイルを再アップロードするのではなく、まだアップロードされていないファイルだけを再アップロードすることがあります。すでにアップロードされていない場合のみ、S3にファイルをアップロードする方法は?

Transfer ManagerまたはS3 Put Requestで焼き尽くされたものがあります。自動的にその処理をさせてくれるのですか、またはHEADリクエストでファイルのMD5をチェックして、アップロード。

ありがとうございます!

答えて

0

これは、継続ブロックを使用して行うことができます。アップロードごとに、失敗したアップロードのケースで再試行戦略を定義することができます。例えば:

[[transferManager upload:uploadRequest] continueWithBlock:^id(AWSTask *task) { 
     if (task.error){ 
      // Handle failed upload here 
     } 

     if (task.result) { 
      //File uploaded successfully. 
     } 
     return nil; 
    }]; 

のためにあなたはまた、タスクのリストを作成し、これは、リスト内のすべてのタスクを実行してから再試行することができ、エラーのあなたのリストが表示されます

NSMutableArray *tasks = [NSMutableArray new];  
AWSTask * taskForUpload = [transferManager upload:uploadRequest]; 
[tasks addObject:taskForUpload]; 
// add more tasks as required  
[[AWSTask taskForCompletionOfAllTasks:tasks] continueWithBlock:^id(AWSTask *task) { 
         if (task.error != nil) { 
          // Handler error/failed uploads here 
         } else { 
          // Handle successful uploads here 
         }       
         return nil; 
        }]; 

を使用することができます。

おかげで、 ローハン

+0

ありがとうございますが、私の使用事例では、あとでアップロード日を再開する必要があるかもしれません。その間、アプリは強制終了され、再開されました。ですから、私はその意味でより信頼できるものを望みます。 – Kamchatka

+0

申し訳ありませんが、その特定の用途は転送ユーティリティによって直接サポートされていません。ユースケースを実現するには、アプリ側にカスタムロジックをコーディングする必要があります。 –

+0

OK、ありがとう@ロハン。オブジェクトにMD5メタデータを追加し、MD5を計算し、HEADをチェックして、MD5がアップロードを決定する前に同じかどうかを確認します。私はまだヘッド要求のバグを持っている - 私は思う - それはエラーを正しく返していない(http://stackoverflow.com/questions/41197569/aws-s3-head-request-not-returning-404- when-file-doesnt-exist-exist)です。 – Kamchatka

0

のではなく、独自のソリューションをコーディングするには、あなたは、Amazon S3にファイルをコピーまたは同期するAWS Command-Line Interface (CLI)を使用することができます。例えば

aws s3 sync <directory> s3://my-bucket/<directory> 

が同期コマンドは、先にないファイルをコピーします。だから、それを定期的に実行すれば、すべてのファイルがS3バケットにコピーされます!

+0

ありがとうございますが、私はiOS/Androidアプリで実装するソリューションを探しています。 – Kamchatka

関連する問題