對象存儲OSS存儲的文件(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。
文檔內容是否對您有幫助?