1. 程式人生 > >阿里雲OSS管理檔案元資訊

阿里雲OSS管理檔案元資訊

管理檔案元資訊

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