Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Object AmazonS3获取上传文件的版本列表_Object_Amazon S3_Versioning - Fatal编程技术网

Object AmazonS3获取上传文件的版本列表

Object AmazonS3获取上传文件的版本列表,object,amazon-s3,versioning,Object,Amazon S3,Versioning,我已经为我的bucket打开了版本控制选项。我还将一个文件两次上传到我的bucket中同名的文件夹中,创建了该文件的两个修订版 e、 g.mybucket/myfile.jpg(修订版1和修订版2(当前)) 我正试图使用AmazonS3.NET工具来获取上述单个文件的版本列表。因为我希望用户能够下载上传文件的以前版本的功能 这是我创建的一个方法,我可以得到我的bucket/文件夹中所有文件的列表。但不是bucket/文件夹中的特定文件(我称之为文件夹,但它本身是一个键/对象) 公共字符串Amaz

我已经为我的bucket打开了版本控制选项。我还将一个文件两次上传到我的bucket中同名的文件夹中,创建了该文件的两个修订版

e、 g.mybucket/myfile.jpg(修订版1和修订版2(当前))

我正试图使用AmazonS3.NET工具来获取上述单个文件的版本列表。因为我希望用户能够下载上传文件的以前版本的功能

这是我创建的一个方法,我可以得到我的bucket/文件夹中所有文件的列表。但不是bucket/文件夹中的特定文件(我称之为文件夹,但它本身是一个键/对象)

公共字符串AmazonS3GetObjectVersions(Guid DocumentId)
{
AmazonS3 s3Client=AmazonS3ClientConnection();
GetObjectMetadataRequest ORequest=新建GetObjectMetadataRequest();
ORequest.BucketName=DocumentStorageFolder(DocumentId);//例如mybucket
ORequest.Key=DocumentStorageReference(DocumentId);//例如myfolder/myfile.jpg
GetObjectMetadataResponse OrResponse=s3Client.GetObjectMetadata(ORequest);
S3ObjectVersion=新的S3ObjectVersion();
version.BucketName=DocumentStorageFolder(DocumentId);
version.Key=DocumentStorageReference(DocumentId);
version.IsDeleteMarker=false;
ListVersionRequest=新建ListVersionRequest();
Request.BucketName=DocumentStorageFolder(DocumentId);
字符串tmp=DocumentStorageReference(DocumentId);
字符串[]tmparr=tmp.Split('/');
Request.KeyMarker=tmparr[0];
//Request.Delimiter=“/”;
//Request.MaxKeys=int.Parse(appConfig[“MAX_VERSIONS]”);
ListVersionsResponse=s3Client.ListVersions(请求);
//Response.NextKeyMarker=tmparr[1];
Response.KeyMarker=tmparr[1];
列表版本=新列表();
Versions=Response.Versions;
返回Versions.ToString();
}

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

正如您所提到的,您遗漏了一件小事。使用ListVersionRequest的前缀

例如

卡马尔

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();
}
ListVersionsRequest Request = new ListVersionsRequest();
Request.BucketName = DocumentStorageFolder(DocumentId);
Request.Prefix = KeyName