开发者社区 问答 正文

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


获取文件元信息(Object Meta)


文件元信息(Object Meta),是对用户上传到OSS的文件的属性描述,分为两种:HTTP标准属性(HTTP Headers)和User Meta(用户自定义元信息)。 文件元信息可以在各种方式上传或者拷贝文件时进行设置。更多文件元信息的介绍,请参看 文件元信息
获取文件元信息可以使用OSSClient.getSimplifiedObjectMeta或OSSClient.getObjectMetadata。getSimplifiedObjectMeta只能获取文件的ETag、Size(文件大小)、 LastModified(最后修改时间);getObjectMetadata能获取文件的全部元数据。getSimplifiedObjectMeta更轻量、更快。

  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. // 获取文件的部分元信息
  9. SimplifiedObjectMeta objectMeta = ossClient.getSimplifiedObjectMeta("<bucketName>", "<key>");
  10. System.out.println(objectMeta.getSize());
  11. System.out.println(objectMeta.getETag());
  12. System.out.println(objectMeta.getLastModified());
  13. // 获取文件的全部元信息
  14. ObjectMetadata metadata = ossClient.getObjectMetadata("<bucketName>", "<key>");
  15. System.out.println(metadata.getContentType());
  16. System.out.println(metadata.getLastModified());
  17. System.out.println(metadata.getExpirationTime());
  18. // 关闭client
  19. ossClient.shutdown();


列出存储空间中的文件


可以通过OSSClient.listObjects列出bucket里的Objects。listObjects有三类参数格式:
  • ObjectListing listObjects(String bucketName)
  • ObjectListing listObjects(String bucketName, String prefix)
  • ObjectListing listObjects(ListObjectsRequest listObjectsRequest)

前两类称为简单列举,最多返回100条object,参数prefix是指定返回Object的前缀。最后一类提供多种过滤功能,可以实现灵活的查询功能。
ObjectListing的参数如下:
参数含义方法
ObjectSummaries限定返回的object meta。List<OSSObjectSummary> getObjectSummaries()
Prefix本次查询结果的开始前缀。String getPrefix()
Delimiter是一个用于对Object名字进行分组的字符。String getDelimiter()
Marker标明这次List Object的起点。String getMarker()
MaxKeys响应请求内返回结果的最大数目。int getMaxKeys()
NextMarker下一次List Object的起点。String getNextMarker()
IsTruncated指明是否所有的结果都已经返回。boolean isTruncated()
CommonPrefixes如果请求中指定了delimiter参数,则返回的包含CommonPrefixes元素。该元素标明以delimiter结尾,并有共同前缀的object的集合。List<String> getCommonPrefixes()
EncodingType指明返回结果中编码使用的类型。String getEncodingType()

提示:
  • listObjects的完整代码请参考:GitHub


简单列举


列举出Bucket下的Object,最多100条object。
  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. ObjectListing objectListing = ossClient.listObjects("<bucketName>", "<KeyPrifex>");
  10. List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
  11. for (OSSObjectSummary s : sums) {
  12.     System.out.println("\t" + s.getKey());
  13. }
  14. // 关闭client
  15. ossClient.shutdown();

列举出Bucket下的指定前缀的Object,最多100条object。
  1. ObjectListing objectListing = ossClient.listObjects("<bucketName>", "<KeyPrifex>");
  2. List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
  3. for (OSSObjectSummary s : sums) {
  4.     System.out.println("\t" + s.getKey());
  5. }






展开
收起
青衫无名 2017-10-18 10:57:31 2155 分享 版权
0 条回答
写回答
取消 提交回答