Object Storage Service (OSS) に格納されるオブジェクトは、キー、データ、およびオブジェクトのメタデータで構成されます。オブジェクトのメタデータは、オブジェクトのプロパティを記述します。これには、標準 HTTP ヘッダーとユーザー定義メタデータが含まれます。標準 HTTP ヘッダーを設定して、キャッシュポリシーや強制ダウンロードポリシーなどのカスタム HTTP リクエストポリシーを定義できます。また、ユーザー定義メタデータを設定して、オブジェクトの目的やプロパティを識別することもできます。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用してください。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「初期化」をご参照ください。
オブジェクトのメタデータを設定するには、
oss:PutObject権限が必要です。オブジェクトのメタデータを取得するには、oss:GetObject権限が必要です。詳細については、「RAM ユーザーへのカスタムポリシーのアタッチ」をご参照ください。
サンプルコード
次のコードは、ファイルメタデータを設定、変更、取得する方法を示しています。
using Aliyun.OSS;
using Aliyun.OSS.Common;
using Aliyun.OSS.Util;
// バケットが配置されているリージョンのエンドポイントに yourEndpoint を設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを 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");
// バケット名を指定します。
var bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。
var objectName = "exampleobject.txt";
// ローカルファイルの完全なパスを指定します。このパスを指定しない場合、ファイルはプロジェクトのローカルパスからアップロードされます。
var localFilename = "D:\\localpath\\examplefile.txt";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
const string region = "cn-hangzhou";
// ClientConfiguration インスタンスを作成し、必要に応じてデフォルトのパラメーターを変更します。
var conf = new ClientConfiguration();
// 署名バージョン4を使用します。
conf.SignatureVersion = SignatureVersion.V4;
// OssClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
using (var fs = File.Open(localFilename, FileMode.Open))
{
// アップロードするファイルのメタデータを作成します。ファイルメタデータを使用して HTTP ヘッダーを設定できます。
var metadata = new ObjectMetadata()
{
// ファイルタイプを指定します。
ContentType = "text/html",
// キャッシュの有効期限を設定します。フォーマットはグリニッジ標準時 (GMT) です。
ExpirationTime = DateTime.Parse("2025-10-12T00:00:00.000Z"),
};
// アップロードするファイルの長さを設定します。ファイルがこの長さを超える場合、ファイルはこの長さに切り捨てられます。ファイルが小さい場合は、実際のファイル長が使用されます。
metadata.ContentLength = fs.Length;
// ファイルがダウンロードされる際の Web ページのキャッシュ動作を設定します。
metadata.CacheControl = "No-Cache";
// mykey1 メタデータの値を myval1 に設定します。
metadata.UserMetadata.Add("mykey1", "myval1");
// mykey2 メタデータの値を myval2 に設定します。
metadata.UserMetadata.Add("mykey2", "myval2");
var saveAsFilename = "file-name-test-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」をご参照ください。