Amazon S3获取上传文件的版本列表

时间:2011-04-30 17:27:24

标签: object amazon-s3 versioning

我已打开我的存储桶的版本控制选项。我还将文件两次上传到我的存储桶中具有相同名称的文件夹,创建了该文件的两个修订版。

e.g。 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();
}

我尝试了一些可用的类,但是我无法获取单个文件的版本历史记录。 (可能遗漏了一些小事)

1 个答案:

答案 0 :(得分:3)

如你所说,你错过了一件小事。使用ListVersionsRequest的前缀

E.g。

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

哈拉