全部產品
Search
文件中心

Object Storage Service:管理檔案元資訊

更新時間:Aug 30, 2018

檔案元資訊(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。
  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();