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介面說明,請參見GetObjectMeta和HeadObject。