2016-12-16 56 views
1

我正在使用AWS Transfer Manager將大量文件備份到S3。有時備份會在中間失敗,我不想重新上傳所有文件,但只有那些尚未上傳的文件。只有在沒有上傳文件的情況下,如何上傳文件到S3?

傳輸管理器或S3 Put請求中有什麼東西可以讓我自動執行此操作,或者是我唯一的解決方案,首先使用HEAD請求檢查文件的MD5,並在啓動之前查看它是否不同上傳。

謝謝!

回答

0

您可以使用continue with block來做到這一點。對於每次上傳,您都可以在失敗的上傳案例中定義重試策略。對於例如爲:

[[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

好的,謝謝@Rohan。我打算將MD5元數據添加到我的對象中,然後計算MD5並檢查HEAD以確定MD5是否相同,然後再決定是否上傳它。我仍然有一個錯誤的頭部請求 - 我認爲 - 它沒有正確返回錯誤(http://stackoverflow.com/questions/41197569/aws-s3-head-request-not-returning-404-儘管當文件不存在時)。 – Kamchatka

0

而不是編碼自己的解決方案,你可以使用AWS Command-Line Interface (CLI)將文件複製或同步到Amazon S3。

例如:

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

sync命令只會複製不在目標文件。所以,只需定期運行它,它會將所有文件複製到S3存儲桶!

+0

謝謝,但我正在尋找一個解決方案,以在iOS/Android應用程序中實現。 – Kamchatka