我正在使用AWS Transfer Manager將大量文件備份到S3。有時備份會在中間失敗,我不想重新上傳所有文件,但只有那些尚未上傳的文件。只有在沒有上傳文件的情況下,如何上傳文件到S3?
傳輸管理器或S3 Put請求中有什麼東西可以讓我自動執行此操作,或者是我唯一的解決方案,首先使用HEAD請求檢查文件的MD5,並在啓動之前查看它是否不同上傳。
謝謝!
我正在使用AWS Transfer Manager將大量文件備份到S3。有時備份會在中間失敗,我不想重新上傳所有文件,但只有那些尚未上傳的文件。只有在沒有上傳文件的情況下,如何上傳文件到S3?
傳輸管理器或S3 Put請求中有什麼東西可以讓我自動執行此操作,或者是我唯一的解決方案,首先使用HEAD請求檢查文件的MD5,並在啓動之前查看它是否不同上傳。
謝謝!
您可以使用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;
}];
這將執行列表中的所有任務,然後給你,你可以重試的錯誤列表。
感謝, 羅漢
而不是編碼自己的解決方案,你可以使用AWS Command-Line Interface (CLI)將文件複製或同步到Amazon S3。
例如:
aws s3 sync <directory> s3://my-bucket/<directory>
sync命令只會複製不在目標文件。所以,只需定期運行它,它會將所有文件複製到S3存儲桶!
謝謝,但我正在尋找一個解決方案,以在iOS/Android應用程序中實現。 – Kamchatka
謝謝,但在我的使用案例中,我可能需要重新開始上傳日子,同時應用程序已被殺死並重新啓動。所以我想在這個意義上更可靠的東西。 – Kamchatka
對不起,但該特定用例不直接受到傳輸實用程序的支持。您將不得不在您的應用程序端編寫自定義邏輯來實現用例。 –
好的,謝謝@Rohan。我打算將MD5元數據添加到我的對象中,然後計算MD5並檢查HEAD以確定MD5是否相同,然後再決定是否上傳它。我仍然有一個錯誤的頭部請求 - 我認爲 - 它沒有正確返回錯誤(http://stackoverflow.com/questions/41197569/aws-s3-head-request-not-returning-404-儘管當文件不存在時)。 – Kamchatka