2014-02-20 65 views
1

我在需要能夠從S3下載一批文件的應用程序中使用Amazon .NET SDK。其中一些文件可能已歸檔到Glacier,在這種情況下,應用程序應該爲任何此類文件啓動RestoreObjectRequests,而不從S3下載任何文件。這裏有一些解決方案不起作用:在AWS .NET SDK中獲取Glacier文件狀態

  • 的S3Object從ListObjectsResponse具有StorageClass屬性,是S3StorageClass.Glacier啓用了冰川的文件。但是,即使在臨時恢復文件時,S3Object仍繼續進行該設置,所以這沒有幫助。

  • 我曾希望RestoreObjectResponse會返回一些不同的結果,如果有問題的文件正在恢復或臨時恢復,但它繼續返回0 /確定。

  • 我可以找到確定文件當前是否可用的唯一方法是嘗試GetObjectRequest並查看它是否失敗。我不想使用該解決方案,因爲它可能涉及下載大量的文件,只能發現其中一個文件位於Glacier中。

任何人都可以提出另一個選項,讓我知道如果所有的圖像都可以不需要下載它們嗎?謝謝!

回答

0

好的,我有一個解決方案。而不是從S3拉着一個完整的文件,有可能拉只是第一個字節:

GetObjectRequest getObjectRequest = new GetObjectRequest(); 
getObjectRequest.BucketName = bucketName; 
getObjectRequest.Key = key; 
getObjectRequest.ByteRange = new ByteRange(0, 1); 

try 
{ 
    s3Client.GetObject(getObjectRequest); 
} 
catch (AmazonS3Exception ex) 
{ 
    if (ex.ErrorCode == "InvalidObjectState") 
    { 
     // In Glacier, perform appropriate actions 
    } 
    else throw ex; 
} 

// If no exception, object has been restored 

我仍然認爲,這本來是更好地爲他們提供,讓你知道狀態Response對象的東西而不是拋出一個異常,但這種方法至少可以滿足我需要的功能。

相關問題