开发者社区 问答 正文

Java-SDK之如何实现管理文件(五)?


删除文件



删除单个文件:


您可以通过OSSClient.deleteObject删除单个文件。

  1. // endpoint以杭州为例,其它region请按实际情况填写
  2. String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  3. // 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建
  4. String accessKeyId = "<yourAccessKeyId>";
  5. String accessKeySecret = "<yourAccessKeySecret>";
  6. // 创建OSSClient实例
  7. OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
  8. // 删除Object
  9. ossClient.deleteObject("<bucketName>", "<key>");
  10. // 关闭client
  11. ossClient.shutdown();


删除多个文件:


您可以通过OSSClient.deleteObjects批量删除文件。
  1. public DeleteObjectsResult deleteObjects(DeleteObjectsRequest deleteObjectsRequest)

每次最多删除1000个Object,并提供两种返回模式:详细(verbose)模式和简单(quiet)模式:
  • 详细模式:返回的成功删除Object的结果,即DeleteObjectsResult.getDeletedObjects,默认模式;
  • 简单模式:返回的删除过程中出错的Object结果,即DeleteObjectsResult.getDeletedObjects。

DeleteObjectsRequest可设置参数如下:
参数作用方法
Keys需要删除的ObjectssetKeys(List<String>)
Quiet返回模式,默认详细模式;true简单模式,false详细模式setQuiet(boolean)
EncodingType指定对返回的Key进行编码,目前支持urlsetEncodingType(String)

DeleteObjectsResult的参数如下:
参数含义方法
deletedObjects删除结果,详细模式时成功删除的objects,简单模式时删除失败的objectsList<String> getDeletedObjects()
EncodingTypedeletedObjects中Key的进行编码,为空没有编码getEncodingType()
  1. // endpoint以杭州为例,其它region请按实际情况填写
  2. String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  3. // 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建
  4. String accessKeyId = "<yourAccessKeyId>";
  5. String accessKeySecret = "<yourAccessKeySecret>";
  6. // 创建OSSClient实例
  7. OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
  8. // 删除Objects
  9. List<String> keys = new ArrayList<String>();
  10. keys.add("key0");
  11. keys.add("key1");
  12. keys.add("key2");
  13. DeleteObjectsResult deleteObjectsResult = ossClient.deleteObjects(new DeleteObjectsRequest("<bucketName>").withKeys(keys));
  14. List<String> deletedObjects = deleteObjectsResult.getDeletedObjects();
  15. // 关闭client
  16. ossClient.shutdown();

提示:
  • 批量删除文件的完整代码请参考:GitHub


拷贝文件


在同一个区域(杭州,深圳,青岛等)中,可以将Object从一个Bucket复制到另外一个Bucket。您可以通过OSSClient.copyObject。
  • CopyObjectResult copyObject(String sourceBucketName, String sourceKey, String destinationBucketName, String destinationKey)
  • CopyObjectResult copyObject(CopyObjectRequest copyObjectRequest)

第一个方法指定源Bucket/Key和目标源Bucket/Key,目标object的内容和元数据与源object相同,称为简单拷贝。第二个方法允许指定目标文件的原因数据、允许指定拷贝的限制条件。如果拷贝操作的源Object地址和目标Object地址相同,则直接替换源Object的meta信息。
CopyObjectRequest可设置参数如下:
参数作用方法
sourceBucketName源Object所在的Bucket的名称setSourceBucketName(String sourceBucketName)
sourceKey源Object的KeysetSourceKey(String sourceKey)
destinationBucketName目标Object所在的Bucket的名称setDestinationBucketName(String destinationBucketName)
destinationKey目标Object的KeysetDestinationKey(String destinationKey)
newObjectMetadata目标Object的元信息setNewObjectMetadata(ObjectMetadata newObjectMetadata)
matchingETagConstraints拷贝的限制条件,如果源Object的ETAG值和提供的ETAG相等,则执行拷贝操作;否则返回错误setMatchingETagConstraints(List<String> matchingETagConstraints)
nonmatchingEtagConstraints拷贝的限制条件,如果源Object的ETAG值和用户提供的ETAG不相等,则执行拷贝操作;否则返回错误setNonmatchingETagConstraints(List<String> nonmatchingEtagConstraints)
unmodifiedSinceConstraint拷贝的限制条件,如果传入参数中的时间等于或者晚于文件实际修改时间,则正常拷贝;否则返回错误setUnmodifiedSinceConstraint(Date unmodifiedSinceConstraint)
modifiedSinceConstraint拷贝的限制条件,如果源Object自从用户指定的时间以后被修改过,则执行拷贝操作;否则返回错误setModifiedSinceConstraint(Date modifiedSinceConstraint)

CopyObjectRequest的参数如下:
参数含义方法
etagOSS Object唯一性标志String getETag()
lastModifiedObject最后修改时间Date getLastModified()

注意:
  • 用户需要有源Object的操作权限,否则会无法完成操作。
  • 该操作不支持跨Region拷贝数据。比如:不支持将杭州Bucket里的Object拷贝到青岛。
  • 该操作支持的最大Object大小为1GB。






展开
收起
青衫无名 2017-10-18 11:00:28 1902 分享 版权
0 条回答
写回答
取消 提交回答