2011-04-30 51 views
3

我已打開我的存儲桶的版本選項。我還將文件兩次上傳到我的存儲桶中具有相同名稱的文件夾,從而創建文件的兩個修訂版本。Amazon S3獲取上傳文件的版本列表

例如mybucket/myfile.jpg(修訂版1和修訂版2(當前版))

我正在嘗試使用AmazonS3 .NET工具來獲取上述單個文件的版本列表。正如我希望用戶能夠下載上傳文件的先前版本的功能。

這是我創建的方法,我能夠獲得我的桶/文件夾中的所有文件的列表。但不是桶/文件夾中的特定文件(我稱之爲文件夾,但其本身就是一個鍵/對象)。

public String AmazonS3GetObjectVersions(Guid DocumentId) 
{ 
    AmazonS3 s3Client = AmazonS3ClientConnection(); 

    GetObjectMetadataRequest ORequest = new GetObjectMetadataRequest(); 
    ORequest.BucketName = DocumentStorageFolder(DocumentId); // e.g. mybucket 
    ORequest.Key = DocumentStorageReference(DocumentId); // e.g. myfolder/myfile.jpg 

    GetObjectMetadataResponse OResponse = s3Client.GetObjectMetadata(ORequest); 

    S3ObjectVersion version = new S3ObjectVersion(); 
    version.BucketName = DocumentStorageFolder(DocumentId); 
    version.Key = DocumentStorageReference(DocumentId); 
    version.IsDeleteMarker = false; 

    ListVersionsRequest Request = new ListVersionsRequest(); 
    Request.BucketName = DocumentStorageFolder(DocumentId); 

    String tmp = DocumentStorageReference(DocumentId); 

    string[] tmparr = tmp.Split('/'); 

    Request.KeyMarker = tmparr[0]; 
    //Request.Delimiter = "/"; 
    //Request.MaxKeys = int.Parse(appConfig["MAX_VERSIONS"]); 

    ListVersionsResponse Response = s3Client.ListVersions(Request); 

    //Response.NextKeyMarker = tmparr[1]; 

    Response.KeyMarker = tmparr[1]; 

    List<S3ObjectVersion> Versions = new List<S3ObjectVersion>(); 

    Versions = Response.Versions; 

    return Versions.ToString(); 
} 

我已經嘗試了一些可用類的,但是我無法獲得版本歷史記錄單個文件。 (可能缺少一些小東西)

回答

3

正如你所說,你錯過了一件小事。使用前綴的ListVersionsRequest

例如,

ListVersionsRequest Request = new ListVersionsRequest(); 
Request.BucketName = DocumentStorageFolder(DocumentId); 
Request.Prefix = KeyName 

卡邁勒