文件(对象)多版本管理
更新时间: 2020-03-24
目录
本节介绍如何管理对象版本。
通过Object的版本管理,在错误覆盖或者删除Object后,您能够将Bucket中存储的Object恢复至任意时刻的历史版本。Bucket的版本状态包括关闭(默认)、开启和暂停三种。
返回结果VersionListing参数如下:
参数 | 描述 | 方法 |
---|---|---|
versionSummaries | 返回结果的文件版本信息 | List |
commonPrefixes | 以delimiter结尾,且有共同前缀的文件集合 | List |
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);