2011-04-30 53 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 

卡迈勒