全部产品
阿里云办公

管理文件元信息

更新时间:2018-08-27 21:40:34

文件元信息(Object Meta)包括HTTP header和自定义元信息,详情请参见开发指南中的文件元信息

设置文件元信息

设置HTTP header

以下代码用于设置HTTP header:

  1. // Endpoint以杭州为例,其它Region请按实际情况填写。
  2. String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  3. // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
  4. String accessKeyId = "<yourAccessKeyId>";
  5. String accessKeySecret = "<yourAccessKeySecret>";
  6. String content = "Hello OSS";
  7. // 创建上传文件的元信息,可以通过文件元信息设置HTTP header。
  8. ObjectMetadata meta = new ObjectMetadata();
  9. String md5 = BinaryUtil.toBase64String(BinaryUtil.calculateMd5(content.getBytes()));
  10. // 开启文件内容MD5校验。开启后OSS会把您提供的MD5与文件的MD5比较,不一致则抛出异常。
  11. meta.setContentMD5(md5);
  12. // 指定上传的内容类型。内容类型决定浏览器将以什么形式、什么编码读取文件。如果没有指定则根据文件的扩展名生成,如果没有扩展名则为默认值application/octet-stream。
  13. meta.setContentType("text/plain");
  14. // 设置内容被下载时的名称。
  15. meta.setContentDisposition("Download File Name");
  16. // 设置上传文件的长度。如超过此长度,则会被截断,为设置的长度。如不足,则为上传文件的实际长度。
  17. meta.setContentLength(content.length());
  18. // 设置内容被下载时网页的缓存行为。
  19. meta.setCacheControl("Download Action");
  20. // 设置缓存过期时间,格式是格林威治时间(GMT)。
  21. meta.setExpirationTime(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
  22. // 设置内容被下载时的编码格式。
  23. meta.setContentEncoding("utf-8");
  24. // 设置header。
  25. meta.setHeader("<yourHeader>", "<yourHeaderValue>");
  26. // 创建OSSClient实例。
  27. OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
  28. // 上传文件。
  29. ossClient.putObject("<yourBucketName>", "<yourObjectName>", new ByteArrayInputStream(content.getBytes()), meta);
  30. // 关闭OSSClient。
  31. ossClient.shutdown();

HTTP header详情请参见RFC2616

设置自定义元信息

您可以自定义文件的元信息来对文件进行描述。

以下代码用于设置文件的自定义元信息:

  1. // Endpoint以杭州为例,其它Region请按实际情况填写。
  2. String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  3. // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
  4. String accessKeyId = "<yourAccessKeyId>";
  5. String accessKeySecret = "<yourAccessKeySecret>";
  6. String content = "Hello OSS";
  7. // 创建OSSClient实例。
  8. OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
  9. // 创建文件元信息。
  10. ObjectMetadata meta = new ObjectMetadata();
  11. // 设置自定义元信息property值为property-value。建议使用Base64编码。
  12. meta.addUserMetadata("property", "property-value");
  13. // 上传文件。
  14. ossClient.putObject("<yourBucketName>", "<yourObjectName>", new ByteArrayInputStream(content.getBytes()), meta);
  15. // 获取文件元信息。
  16. ossClient.getObjectMetadata("<yourBucketName>", "<yourObjectName>");
  17. // 关闭OSSClient。
  18. ossClient.shutdown();

下载文件时,文件元信息也会同时下载。 一个文件可以有多个元信息,总大小不能超过8KB。

修改文件元信息

以下代码用于修改文件的元信息:

  1. // Endpoint以杭州为例,其它Region请按实际情况填写。
  2. String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  3. // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
  4. String accessKeyId = "<yourAccessKeyId>";
  5. String accessKeySecret = "<yourAccessKeySecret>";
  6. String sourceBucketName = "<yourSourceBucketName>";
  7. String sourceObjectName = "<yourSourceObjectName>";
  8. String destinationBucketName = "<yourDestinationBucketName>";
  9. String destinationObjectName = "<yourDestinationObjectName>";
  10. // 创建OSSClient实例。
  11. OSSClient ossClient = new OSSClient(endpoint, accessKeyId,accessKeySecret);
  12. // 设置源文件与目标文件相同,调用ossClient.copyObject方法修改文件元信息。
  13. CopyObjectRequest request = new CopyObjectRequest(sourceBucketName, sourceObjectName, destinationBucketName, destinationObjectName);
  14. ObjectMetadata meta = new ObjectMetadata();
  15. // 指定上传的内容类型。内容类型决定浏览器将以什么形式、什么编码读取文件。如果没有指定则根据文件的扩展名生成,如果没有扩展名则为默认值application/octet-stream。
  16. meta.setContentType("text/plain");
  17. // 设置内容被下载时的名称。
  18. meta.setContentDisposition("Download File Name");
  19. // 设置内容被下载时网页的缓存行为。
  20. meta.setCacheControl("Download Action");
  21. // 设置缓存过期时间,格式是格林威治时间(GMT)。
  22. meta.setExpirationTime(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
  23. // 设置内容被下载时的编码格式。
  24. meta.setContentEncoding("utf-8");
  25. // 设置header。
  26. meta.setHeader("<yourHeader>", "<yourHeaderValue>");
  27. // 设置自定义元信息property值为property-value。
  28. meta.addUserMetadata("property", "property-value");
  29. request.setNewObjectMetadata(meta);
  30. //修改元信息。
  31. ossClient.copyObject(request);
  32. // 关闭OSSClient。
  33. ossClient.shutdown();

获取文件元信息

您可以通过以下两种方法获取文件元信息:

方法 描述 优势
ossClient.getSimplifiedObjectMeta 获取文件的ETag、Size(文件大小)、 LastModified(最后修改时间)。 更轻量、更快
ossClient.getObjectMetadata 获取文件的全部元信息。

以下代码用于获取文件元信息:

  1. // Endpoint以杭州为例,其它Region请按实际情况填写。
  2. String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  3. // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
  4. String accessKeyId = "<yourAccessKeyId>";
  5. String accessKeySecret = "<yourAccessKeySecret>";
  6. // 创建OSSClient实例。
  7. OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
  8. // 获取文件的部分元信息。
  9. SimplifiedObjectMeta objectMeta = ossClient.getSimplifiedObjectMeta("<yourBucketName>", "<yourObjectName>");
  10. System.out.println(objectMeta.getSize());
  11. System.out.println(objectMeta.getETag());
  12. System.out.println(objectMeta.getLastModified());
  13. // 获取文件的全部元信息。
  14. ObjectMetadata metadata = ossClient.getObjectMetadata("<yourBucketName>", "<yourObjectName>");
  15. System.out.println(metadata.getContentType());
  16. System.out.println(metadata.getLastModified());
  17. System.out.println(metadata.getExpirationTime());
  18. // 关闭OSSClient。
  19. ossClient.shutdown();