文件(对象)多版本管理

更新时间: 2020-03-24

目录

获取对象版本信息

删除指定版本对象

本节介绍如何管理对象版本。

通过Object的版本管理,在错误覆盖或者删除Object后,您能够将Bucket中存储的Object恢复至任意时刻的历史版本。Bucket的版本状态包括关闭(默认)、开启和暂停三种。

返回结果VersionListing参数如下:

参数 描述 方法
versionSummaries 返回结果的文件版本信息 List getVersionSummaries()
commonPrefixes 以delimiter结尾,且有共同前缀的文件集合 List getCommonPrefixes()
bucketName 存储桶名称 String getBucketName()
nextKeyMarker 下一次列举文件的起点 String getNextKeyMarker()
nextVersionIdMarker 下一次列举版本Id的起点 String getNextVersionIdMarker()
isTruncated 指明列举文件是否被截断。列举完没有截断,返回值为false。没列举完就有截断,返回值为true boolean isTruncated()
prefix 本次查询结果的前缀 String getPrefix()
keyMarker 标明本次列举文件的起点 String getKeyMarker()
versionIdMarker 标明本次列举版本Id的起点 String getVersionIdMarker()
maxKeys 列举文件的最大个数 int getMaxKeys()
delimiter 对文件名称进行分组的一个字符 String getDelimiter()
encodingType 指明返回结果中编码使用的类型 String getEncodingType()

获取对象版本信息

  • 获取的指定存储桶下的所有对象版本信息。

    以下代码用于获取的指定存储桶下的所有对象版本信息:

// Endpoint以华北三为例,其它Region请按实际情况填写。
String endpoint = "oss.cn-north-3.inspurcloudoss.com";
String accessKey = "<yourAccessKey>";
String secretKey = "<yourSecretKey>";
String bucketName = "<yourBucketName>";

//创建OSSClient实例
OSSClientImpl ossClient = new OSSClientImpl(endpoint, accessKey, secretKey);

ListVersionsRequest listVersionsRequest = new ListVersionsRequest();
listVersionsRequest.setBucketName("<yourBucketName>");

VersionListing versionListing = ossClient.listVersions(listVersionsRequest);
versionListing.getVersionSummaries().forEach(ossVersionSummary -> {
    //指定的存储桶的名字
    System.out.println(versionListing.getBucketName());

    //文件名字
    System.out.println(ossVersionSummary.getKey());

    //文件的版本Id
    System.out.println(ossVersionSummary.getVersionId());
});
  • 获取的指定存储桶下指定前缀的对象版本信息。

    以下代码用于获取的指定存储桶下指定前缀的对象版本信息:

// Endpoint以华北三为例,其它Region请按实际情况填写。
String endpoint = "oss.cn-north-3.inspurcloudoss.com";
String accessKey = "<yourAccessKey>";
String secretKey = "<yourSecretKey>";
String bucketName = "<yourBucketName>";

//创建OSSClient实例
OSSClientImpl ossClient = new OSSClientImpl(endpoint, accessKey, secretKey);

//获取对象版本信息
//设置获取指定的前缀
String prefix = "perfixKey";

//获取前缀为prefix的对象版本信息
VersionListing versionListing = ossClient.listVersions(bucketName, prefix);

versionListing.getVersionSummaries().forEach(ossVersionSummary -> {
    //指定的存储桶的名字
    System.out.println(versionListing.getBucketName());

    //文件名字
    System.out.println(ossVersionSummary.getKey());

    //文件的版本Id
    System.out.println(ossVersionSummary.getVersionId());
});
  • 提供多种过滤功能,实现灵活的查询功能。ListVersionsRequest参数如下:
参数 描述 方法
bucketName 需要查询版本信息的文件所在的存储桶名字 setBucketName(String bucketName)
prefix 文件前缀 setPrefix(String prefix)
keyMarker 查询版本信息开始的文件位置 setKeyMarker(String keyMarker)
versionIdMarker 查询版本信息开始的版本id位置 setVersionIdMarker(String versionIdMarker)
delimiter 用于对文件名称进行分组的一个字符。所有名称包含指定的前缀且第一次出现delimiter字符之间的文件作为一组元素。 setDelimiter(String delimiter)
maxResults 限定返回结果的最大数值 setMaxResults(Integer maxResults)
encodingType 限制返回的文件的编码格式 setEncodingType(String encodingType)

以下代码用于灵活查询指定存储桶下的对象版本信息:

// Endpoint以华北三为例,其它Region请按实际情况填写。
String endpoint = "oss.cn-north-3.inspurcloudoss.com";
String accessKey = "<yourAccessKey>";
String secretKey = "<yourSecretKey>";
String bucketName = "<yourBucketName>";

//创建OSSClient实例
OSSClientImpl ossClient = new OSSClientImpl(endpoint, accessKey, secretKey);

//获取对象版本信息
ListVersionsRequest listVersionsRequest = new ListVersionsRequest();
listVersionsRequest.setBucketName("mrtest");
//设置获取指定的前缀
listVersionsRequest.setPrefix("perfixKey");
//设置获取的开始位置
listVersionsRequest.setKeyMarker("keyMarker");
//设置获取指定版本号之后的开始位置
listVersionsRequest.setVersionIdMarker("versionIdMarker");
//设置对文件名称进行分组(分层)的一个字符,例如:aasd|sd,设置delimiter为'|',相当于aasd是sd的父目录
listVersionsRequest.setDelimiter("/");
//设置查询的最大个数为20
listVersionsRequest.setMaxResults("20");

//设置前缀、开始标记、版本id标记和分隔符获取最多maxKeys个对象版本信息
VersionListing versionListing = ossClient.listVersions(listVersionsRequest);
versionListing.getVersionSummaries().forEach(ossVersionSummary -> {
    //指定的存储桶的名字
    System.out.println(versionListing.getBucketName());

    //文件名字
    System.out.println(ossVersionSummary.getKey());

    //文件的版本Id
    System.out.println(ossVersionSummary.getVersionId());
});

删除指定版本对象

以下代码用于删除对象版本:

// Endpoint以华北三为例,其它Region请按实际情况填写。
String endpoint = "oss.cn-north-3.inspurcloudoss.com";
String accessKey = "<yourAccessKey>";
String secretKey = "<yourSecretKey>";
String bucketName = "<yourBucketName>";
String key = "<yourObjectName>";
String versionId = "<objectVersionId>";

//创建OSSClient实例
OSSClientImpl ossClient = new OSSClientImpl(endpoint, accessKey, secretKey);

//删除对象版本
ossClient.deleteVersion(bucketName, key, versionId);