阿里雲OSS管理檔案元資訊
阿新 • • 發佈:2019-09-29
管理檔案元資訊
檔案元資訊(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("attachment; filename=\"DownloadFilename\""); // 設定上傳檔案的長度。如超過此長度,則會被截斷,為設定的長度。如不足,則為上傳檔案的實際長度。 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例項。 OSS ossClient = new OSSClientBuilder().build(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。建議使用Base64編碼。 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();
詳細參考:
https://helpcdn.aliyun.com/document_detail/84840.html?spm=a2c4g.11186623.2.12.1b363ef2siO7Ic