檔案元資訊(Object Meta)包括HTTP header和自訂元資訊,詳情請參見開發指南中的檔案元資訊。
設定檔案元資訊
設定HTTP header
以下代碼用於設定HTTP header:
// Endpoint以杭州為例,其它Region請按實際情況填寫。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String content = "Hello OSS";
// 建立上傳檔案的元資訊,可以通過檔案元資訊設定HTTP header。
ObjectMetadata meta = new ObjectMetadata();
String md5 = BinaryUtil.toBase64String(BinaryUtil.calculateMd5(content.getBytes()));
// 開啟檔案內容MD5校驗。開啟後OSS會把您提供的MD5與檔案的MD5比較,不一致則拋出異常。
meta.setContentMD5(md5);
// 指定上傳的內容類型。內容類型決定瀏覽器將以什麼形式、什麼編碼讀取檔案。如果沒有指定則根據檔案的副檔名生成,如果沒有副檔名則為預設值application/octet-stream。
meta.setContentType("text/plain");
// 設定內容被下載時的名稱。
meta.setContentDisposition("Download File Name");
// 設定上傳檔案的長度。如超過此長度,則會被截斷,為設定的長度。如不足,則為上傳檔案的實際長度。
meta.setContentLength(content.length());
// 設定內容被下載時網頁的緩存行為。
meta.setCacheControl("Download Action");
// 設定緩存過期時間,格式是格林威治時間(GMT)。
meta.setExpirationTime(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
// 設定內容被下載時的編碼格式。
meta.setContentEncoding("utf-8");
// 設定header。
meta.setHeader("<yourHeader>", "<yourHeaderValue>");
// 建立OSSClient執行個體。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
// 上傳檔案。
ossClient.putObject("<yourBucketName>", "<yourObjectName>", new ByteArrayInputStream(content.getBytes()), meta);
// 關閉OSSClient。
ossClient.shutdown();
HTTP header詳情請參見RFC2616。
設定自訂元資訊
您可以自訂檔案的元資訊來對檔案進行描述。
以下代碼用於設定檔案的自訂元資訊:
// Endpoint以杭州為例,其它Region請按實際情況填寫。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String content = "Hello OSS";
// 建立OSSClient執行個體。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
// 建立檔案元資訊。
ObjectMetadata meta = new ObjectMetadata();
// 設定自訂元資訊property值為property-value。
meta.addUserMetadata("property", "property-value");
// 上傳檔案。
ossClient.putObject("<yourBucketName>", "<yourObjectName>", new ByteArrayInputStream(content.getBytes()), meta);
// 獲取檔案元資訊。
ossClient.getObjectMetadata("<yourBucketName>", "<yourObjectName>");
// 關閉OSSClient。
ossClient.shutdown();
下載檔案時,檔案元資訊也會同時下載。 一個檔案可以有多個元資訊,總大小不能超過8KB。
修改檔案元資訊
以下代碼用於修改檔案的元資訊:
// Endpoint以杭州為例,其它Region請按實際情況填寫。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String sourceBucketName = "<yourSourceBucketName>";
String sourceObjectName = "<yourSourceObjectName>";
String destinationBucketName = "<yourDestinationBucketName>";
String destinationObjectName = "<yourDestinationObjectName>";
// 建立OSSClient執行個體。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId,accessKeySecret);
// 設定源檔案與目標檔案相同,調用ossClient.copyObject方法修改檔案元資訊。
CopyObjectRequest request = new CopyObjectRequest(sourceBucketName, sourceObjectName, destinationBucketName, destinationObjectName);
ObjectMetadata meta = new ObjectMetadata();
// 指定上傳的內容類型。內容類型決定瀏覽器將以什麼形式、什麼編碼讀取檔案。如果沒有指定則根據檔案的副檔名生成,如果沒有副檔名則為預設值application/octet-stream。
meta.setContentType("text/plain");
// 設定內容被下載時的名稱。
meta.setContentDisposition("Download File Name");
// 設定內容被下載時網頁的緩存行為。
meta.setCacheControl("Download Action");
// 設定緩存過期時間,格式是格林威治時間(GMT)。
meta.setExpirationTime(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
// 設定內容被下載時的編碼格式。
meta.setContentEncoding("utf-8");
// 設定header。
meta.setHeader("<yourHeader>", "<yourHeaderValue>");
// 設定自訂元資訊property值為property-value。
meta.addUserMetadata("property", "property-value");
request.setNewObjectMetadata(meta);
//修改元資訊。
ossClient.copyObject(request);
// 關閉OSSClient。
ossClient.shutdown();
獲取檔案元資訊
您可以通過以下兩種方法獲取檔案元資訊:
方法 | 描述 | 優勢 |
---|---|---|
ossClient.getSimplifiedObjectMeta | 獲取檔案的ETag、Size(檔案大小)、 LastModified(最後修改時間)。 | 更輕量、更快 |
ossClient.getObjectMetadata | 獲取檔案的全部元資訊。 | 無 |
以下代碼用於獲取檔案元資訊:
// Endpoint以杭州為例,其它Region請按實際情況填寫。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
// 建立OSSClient執行個體。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
// 獲取檔案的部分元資訊。
SimplifiedObjectMeta objectMeta = ossClient.getSimplifiedObjectMeta("<yourBucketName>", "<yourObjectName>");
System.out.println(objectMeta.getSize());
System.out.println(objectMeta.getETag());
System.out.println(objectMeta.getLastModified());
// 獲取檔案的全部元資訊。
ObjectMetadata metadata = ossClient.getObjectMetadata("<yourBucketName>", "<yourObjectName>");
System.out.println(metadata.getContentType());
System.out.println(metadata.getLastModified());
System.out.println(metadata.getExpirationTime());
// 關閉OSSClient。
ossClient.shutdown();