全部產品
Search
文件中心

Object Storage Service:.NET管理檔案中繼資料

更新時間:Nov 26, 2024

Object Storage Service儲存的檔案(Object)資訊包含Key、Data和Object Meta。Object Meta是對檔案的屬性描述,包括HTTP標準屬性(HTTP Header)和使用者自訂中繼資料(User Meta)兩種。您可以通過設定HTTP標準屬性來自訂HTTP請求的策略,例如檔案(Object)緩衝策略、強制下載策略等。您還可以通過設定使用者自訂中繼資料來標識Object的用途或屬性等。

注意事項

  • 本文以華東1(杭州)外網Endpoint為例。如果您希望通過與OSS同地區的其他阿里雲產品訪問OSS,請使用內網Endpoint。關於OSS支援的Region與Endpoint的對應關係,請參見OSS地區和訪問網域名稱

  • 本文以OSS網域名稱建立OSSClient為例。如果您希望通過自訂網域名、STS等方式建立OSSClient,請參見初始化

  • 要設定檔案中繼資料,您必須具有oss:PutObject許可權;要擷取檔案中繼資料,您必須具有oss:GetObject許可權。具體操作,請參見為RAM使用者授權自訂的權限原則

範例程式碼

以下代碼用於設定、修改和擷取檔案中繼資料:

using Aliyun.OSS;
using Aliyun.OSS.Common;
using Aliyun.OSS.Util;

// yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
var endpoint = "yourEndpoint";
// 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// 填寫Bucket名稱。
var bucketName = "examplebucket";
// 填寫Object完整路徑。Object完整路徑中不能包含Bucket名稱。
var objectName = "exampleobject.txt";
// 填寫本地檔案的完整路徑。如果未指定本地路徑,則預設從樣本程式所屬專案對應本地路徑中上傳檔案。
var localFilename = "D:\\localpath\\examplefile.txt";
// 填寫Bucket所在地區對應的Region。以華東1(杭州)為例,Region填寫為cn-hangzhou。
const string region = "cn-hangzhou";

// 建立ClientConfiguration執行個體,按照您的需要修改預設參數。
var conf = new ClientConfiguration();

// 設定v4簽名。
conf.SignatureVersion = SignatureVersion.V4;

// 建立OssClient執行個體。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
c.SetRegion(region);
try
{
    using (var fs = File.Open(localFilename, FileMode.Open))
    {
        // 建立上傳檔案的中繼資料,可以通過檔案中繼資料設定HTTP header。
        var metadata = new ObjectMetadata()
        {
            // 指定檔案類型。
            ContentType = "text/html",
            // 設定緩衝到期時間,格式是格林威治時間(GMT)。
            ExpirationTime = DateTime.Parse("2025-10-12T00:00:00.000Z"),
        };
        // 設定上傳檔案的長度。如超過此長度,則會被截斷為設定的長度。如不足,則為上傳檔案的實際長度。
        metadata.ContentLength = fs.Length;
        // 設定檔案被下載時網頁的緩衝行為。
        metadata.CacheControl = "No-Cache";
        // 設定中繼資料mykey1值為myval1。
        metadata.UserMetadata.Add("mykey1", "myval1");
        // 設定中繼資料mykey2值為myval2。
        metadata.UserMetadata.Add("mykey2", "myval2");
        var saveAsFilename = "檔案名稱測試123.txt";
        var contentDisposition = string.Format("attachment;filename*=utf-8''{0}", HttpUtils.EncodeUri(saveAsFilename, "utf-8"));
        // 把請求所得的內容存為一個檔案的時候提供一個預設的檔案名稱。
        metadata.ContentDisposition = contentDisposition;
        // 上傳檔案並設定檔案中繼資料。
        client.PutObject(bucketName, objectName, fs, metadata);
        Console.WriteLine("Put object succeeded");
        // 擷取檔案中繼資料。
        var oldMeta = client.GetObjectMetadata(bucketName, objectName);
        // 設定新的檔案中繼資料。
        var newMeta = new ObjectMetadata()
        {
            ContentType = "application/octet-stream",
            ExpirationTime = DateTime.Parse("2035-11-11T00:00:00.000Z"),
            // 指定檔案被下載時的內容編碼格式。
            ContentEncoding = null,
            CacheControl = ""
        };
        // 增加自訂中繼資料。
        newMeta.UserMetadata.Add("author", "oss");
        newMeta.UserMetadata.Add("flag", "my-flag");
        newMeta.UserMetadata.Add("mykey2", "myval2-modified-value");
        // 通過ModifyObjectMeta方法修改檔案中繼資料。
        client.ModifyObjectMeta(bucketName, objectName, newMeta);
    }
}
catch (Exception ex)
{
    Console.WriteLine("Put object failed, {0}", ex.Message);
}

相關文檔

  • 關於設定、修改和擷取檔案中繼資料的完整範例程式碼,請參見GitHub樣本

  • 關於在簡單上傳過程中設定檔案中繼資料的API介面說明,請參見PutObject

  • 關於在拷貝檔案過程中修改檔案中繼資料的API介面說明,請參見CopyObject

  • 關於擷取檔案中繼資料的API介面說明,請參見GetObjectMetaHeadObject