Object Storage Service (OSS) では、オブジェクトタグを設定してオブジェクトを分類できます。 ライフサイクルルールを設定し、タグに基づいてオブジェクトへのアクセスを制御できます。
オブジェクトタグの詳細については、「オブジェクトタグ付け」をご参照ください。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba Cloudサービスを使用してOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSでサポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSTS (Security Token Service) を使用してOSSClientインスタンスを作成する場合は、「初期化」をご参照ください。
オブジェクトにタグを追加するには、
oss:PutObjectTagging
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。
オブジェクトをアップロードするときにオブジェクトにタグを追加する
次の例では、単純アップロード、マルチパートアップロード、追加アップロード、および再開可能アップロードを使用して、オブジェクトにタグを追加する方法について説明します。
シンプルアップロードを使用してオブジェクトをアップロードするときにオブジェクトにタグを追加する
次のサンプルコードは、単純アップロードを使用してオブジェクトをアップロードするときに、オブジェクトにタグを追加する方法の例を示しています。
System.Textを使用した; Aliyun.OSSを使用します。System.Textを使用する。Aliyun.OSS.Utilを使用します。// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを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 objectContent = "単なるクラウドではありません。"; 文字列UrlEncodeKey (文字列キー) { const文字列CharsetName = "utf-8"; const char separator = '/'; var segments = key分割 (セパレータ); var encodedKey = new StringBuilder(); encodedKey.Append(HttpUtils.EncodeUri(segments[0], CharsetName)); for (var i = 1; i < segments.Length; i ++) encodedKey.Append(separator).Append(HttpUtils.EncodeUri(segments[i], CharsetName)); if (key.EndsWith(separator.ToString())) { // String#splitは後続の空の文字列を無視します。たとえば、"a/b/" は2エントリの配列として分割され、 // 末尾のスラッシュをすべてuriに追加する必要があります。 foreach (キーのvar ch) { if (ch == separator) encodedKey.Append(separator); else break; } } encodedKey.ToString() を返します。} // OSSClientインスタンスを作成します。 var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret); トライ { byte[] binaryData = Encoding.ASCII.GetBytes(objectContent); MemoryStream requestContent = new MemoryStream(binaryData); var meta = new ObjectMetadata(); // HTTPヘッダーのタグを設定します。 string str = UrlEncodeKey("key1") + "=" + UrlEncodeKey("value1") + "&" + UrlEncodeKey("key2") + "=" + UrlEncodeKey("value2"); meta.AddHeader("x-oss-tagging" 、str); var putRequest = new PutObjectRequest(bucketName, objectName, requestContent); putRequest. メタデータ=メタ; // オブジェクトをアップロードし、オブジェクトにタグを追加します。 client.PutObject(putRequest); Console.WriteLine("Put object successed"); } キャッチ (例外ex) { Console.WriteLine("Put object failed, {0}", ex.Message); }
マルチパートアップロードを使用してオブジェクトをアップロードするときにオブジェクトにタグを追加する
次のサンプルコードは、マルチパートアップロードを使用してオブジェクトをアップロードするときに、オブジェクトにタグを追加する方法の例を示しています。
Aliyun.OSSを使用したAliyun.OSS.Utilを使用します。System.Textを使用する。// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを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"; // ローカルファイルのフルパスを指定します。 例: D :\\ localpath\\examplefile.txt。 デフォルトでは、ローカルファイルのフルパスを指定しない場合、サンプルプログラムが属するプロジェクトのパスからローカルファイルがアップロードされます。 var localFilename = "D :\\ localpath\\examplefile.txt"; 文字列UrlEncodeKey (文字列キー) { const文字列CharsetName = "utf-8"; const char separator = '/'; var segments = key分割 (セパレータ); var encodedKey = new StringBuilder(); encodedKey.Append(HttpUtils.EncodeUri(segments[0], CharsetName)); for (var i = 1; i < segments.Length; i ++) encodedKey.Append(separator).Append(HttpUtils.EncodeUri(segments[i], CharsetName)); if (key.EndsWith(separator.ToString())) { // String#splitは後続の空の文字列を無視します。たとえば、"a/b/" は2エントリの配列として分割され、 // 末尾のスラッシュをすべてuriに追加する必要があります。 foreach (キーのvar ch) { if (ch == separator) encodedKey.Append(separator); else break; } } encodedKey.ToString() を返します。} // OSSClientインスタンスを作成します。 var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret); // マルチパートアップロードタスクを開始します。 var uploadId = ""; トライ { // オブジェクトの名前と、オブジェクトのアップロード先のバケットを指定します。 InitiateMultipartUploadRequestでオブジェクトメタデータを設定できます。 ただし、ContentLengthを指定する必要はありません。 var request = new InitiateMultipartUploadRequest(bucketName, objectName); var meta = new ObjectMetadata(); // HTTPヘッダーのタグを設定します。 string str = UrlEncodeKey("key1") + "=" + UrlEncodeKey("value1") + "&" + UrlEncodeKey("key2") + "=" + UrlEncodeKey("value2"); meta.AddHeader("x-oss-tagging" 、str); リクエスト。ObjectMetadata = meta; var result = client.InitiateMultipartUpload(request); uploadId = result.UploadId; // アップロードIDを表示します。 Console.WriteLine("Init multi part upload succeeded"); Console.WriteLine("Upload Id:{0}", result.UploadId); } キャッチ (例外ex) { Console.WriteLine("Initマルチパートアップロードに失敗しました, {0}", 例: メッセージ); } // 部品の総数を計算します。 var partSize = 100*1024; var fi = new FileInfo(localFilename); var fileSize = fi.Length; var partCount = fileSize / partSize; if (fileSize % partSize != 0) { partCount ++; } // マルチパートアップロードタスクを開始します。 partETagsはパーツETagsのリストです。 OSSは、部品リストを受信した後、各部品の有効性を検証します。 すべての部品が検証された後、OSSはこれらの部品を完全なオブジェクトに結合します。 var partETags = newリスト <PartETag>(); トライ { using (var fs = File.Open(localFilename, FileMode.Open)) { for (var i = 0; i < partCount; i++) { var skipBytes = (long)partSize * i; // 現在のアップロードタスクの開始位置を見つけます。 fs.Seek(skipBytes, 0); // このアップロードのパーツサイズを計算します。 最後のパーツのサイズは、オブジェクトが計算されたパーツサイズで分割された後の残りのサイズです。 var size = (partSize < fileSize - skipBytes) ? partSize : (fileSize - skipBytes); var request = new UploadPartRequest(bucketName, objectName, uploadId) { InputStream = fs, PartSize = size, PartNumber = i + 1 }; // UploadPartを呼び出してパーツをアップロードします。 返される結果には、部品のETag値が含まれます。 var result = client.UploadPart(request); partETags.Add(result.PartETag); Console.WriteLine("finish {0}/{1}", partETags.Count, partCount); } Console.WriteLine("Put multi part upload succeeded"); } } キャッチ (例外ex) { Console.WriteLine("Put multi part upload failed, {0}", ex.Message); } // マルチパートアップロードタスクを完了します。 トライ { var completeMultipartUploadRequest = new CompleteMultipartUploadRequest(bucketName, objectName, uploadId); foreach (var partETag in partETags) { completeMultipartUploadRequest.PartETags.Add(partETag); } var result = client.CompleteMultipartUpload(completeMultipartUploadRequest); Console.WriteLine("完全なマルチパート成功"); } キャッチ (例外ex) { Console.WriteLine("complete multi part failed, {0}", ex.Message); }
追加アップロードを使用してオブジェクトをアップロードするときにオブジェクトにタグを追加する
次のサンプルコードは、追加アップロードを使用してオブジェクトをアップロードするときに、オブジェクトにタグを追加する方法の例を示しています。
Aliyun.OSSを使用したAliyun.OSS.Utilを使用します。System.Textを使用する。// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを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"; // ローカルファイルのフルパスを指定します。 例: D :\\ localpath\\examplefile.txt。 デフォルトでは、ローカルファイルのフルパスを指定しない場合、サンプルプログラムが属するプロジェクトのパスからローカルファイルがアップロードされます。 var localFilename = "D :\\ localpath\\examplefile.txt"; 文字列UrlEncodeKey (文字列キー) { const文字列CharsetName = "utf-8"; const char separator = '/'; var segments = key分割 (セパレータ); var encodedKey = new StringBuilder(); encodedKey.Append(HttpUtils.EncodeUri(segments[0], CharsetName)); for (var i = 1; i < segments.Length; i ++) encodedKey.Append(separator).Append(HttpUtils.EncodeUri(segments[i], CharsetName)); if (key.EndsWith(separator.ToString())) { // String#splitは後続の空の文字列を無視します。たとえば、"a/b/" は2エントリの配列として分割され、 // 末尾のスラッシュをすべてuriに追加する必要があります。 foreach (キーのvar ch) { if (ch == separator) encodedKey.Append(separator); else break; } } encodedKey.ToString() を返します。} // OSSClientインスタンスを作成します。 var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret); // オブジェクトが初めて追加された場合、追加操作の開始位置は0です。 次の追加操作の開始位置は、応答に含まれる。 次の追加アップロードの開始位置は、オブジェクトの現在の長さです。 ロングポジション=0; トライ { var metadata = client.GetObjectMetadata(bucketName, objectName); position = metadata.ContentLength; } catch (例外) { } トライ { using (var fs = File.Open(localFilename, FileMode.Open)) { var request = new AppendObjectRequest(bucketName, objectName) { ObjectMetadata = new ObjectMetadata(), Content = fs, Position = position }; var meta = new ObjectMetadata(); // HTTPヘッダーのタグを設定します。 string str = UrlEncodeKey("key1") + "=" + UrlEncodeKey("value1") + "&" + UrlEncodeKey("key2") + "=" + UrlEncodeKey("value2"); meta.AddHeader("x-oss-tagging" 、str); リクエスト。ObjectMetadata = meta; // 最初の追加操作を実行します。 オブジェクトが初めて追加されたときに設定されたタグのみがオブジェクトに追加されます。 var result = client.AppendObject(request); // 追加操作の開始位置を指定します。 position = result.NextAppendPosition; Console.WriteLine("Append object succeeded, next append position:{0}", position); } // 次の追加操作の位置を取得し、2番目の追加操作を実行します。 using (var fs = File.Open(localFilename, FileMode.Open)) { var request = new AppendObjectRequest(bucketName, objectName) { ObjectMetadata = new ObjectMetadata(), Content = fs, Position = position }; var result = client.AppendObject(request); position = result.NextAppendPosition; Console.WriteLine("Append object succeeded, next append position:{0}", position); } } キャッチ (例外ex) { Console.WriteLine("Append object failed, {0}", ex.Message); }
再開可能アップロードを使用してオブジェクトをアップロードするときにオブジェクトにタグを追加する
次のサンプルコードは、再開可能アップロードを使用してオブジェクトをアップロードするときに、オブジェクトにタグを追加する方法の例を示しています。
Aliyun.OSSを使用したAliyun.OSS.Common; を使用 Aliyun.OSS.Utilを使用します。System.Textを使用する。// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを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"; // ローカルファイルのフルパスを指定します。 例: D :\\ localpath\\examplefile.txt。 デフォルトでは、ローカルファイルのフルパスを指定しない場合、サンプルプログラムが属するプロジェクトのパスからローカルファイルがアップロードされます。 var localFilename = "D :\\ localpath\\examplefile.txt"; // 各パーツのアップロード結果を記録するチェックポイントファイルを指定します。 チェックポイントファイルには、アップロードの進行状況に関する情報が格納されます。 string checkpointDir = "yourCheckpointDir"; 文字列UrlEncodeKey (文字列キー) { const文字列CharsetName = "utf-8"; const char separator = '/'; var segments = key分割 (セパレータ); var encodedKey = new StringBuilder(); encodedKey.Append(HttpUtils.EncodeUri(segments[0], CharsetName)); for (var i = 1; i < segments.Length; i ++) encodedKey.Append(separator).Append(HttpUtils.EncodeUri(segments[i], CharsetName)); if (key.EndsWith(separator.ToString())) { // String#splitは後続の空の文字列を無視します。たとえば、"a/b/" は2エントリの配列として分割され、 // 末尾のスラッシュをすべてuriに追加する必要があります。 foreach (キーのvar ch) { if (ch == separator) encodedKey.Append(separator); else break; } } encodedKey.ToString() を返します。} // OSSClientインスタンスを作成します。 var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret); トライ { // UploadFileRequestを使用してパラメーターを設定します。 UploadObjectRequest request = new UploadObjectRequest(bucketName, objectName, localFilename) { // 各パーツのサイズを指定します。 PartSize = 8 * 1024 * 1024, // 同時スレッドの数を指定します。 ParallelThreadCount = 3, // checkpointDirは、マルチパートアップロードの結果を記録するために使用されます。 このファイルには、アップロードの進行状況に関する情報が格納されます。 パーツのアップロードに失敗した場合、ファイルに記録されている進行状況に基づいてタスクを続行できます。 checkpointDirをnullに設定すると、再開可能なアップロードは有効になりません。オブジェクトのアップロードに失敗した場合、オブジェクトは再アップロードされます。 CheckpointDir = checkpointDir, }; var meta = new ObjectMetadata(); // HTTPヘッダーのタグを設定します。 string str = UrlEncodeKey("key1") + "=" + UrlEncodeKey("value1") + "&" + UrlEncodeKey("key2") + "=" + UrlEncodeKey("value2"); meta.AddHeader("x-oss-tagging" 、str); request. メタデータ=メタ; // Start resumable upload. client.ResumableUploadObject(request); Console.WriteLine("Resumable upload object:{0} successed", objectName); } キャッチ (OssException ex) { Console.WriteLine("Failed with error code: {0}; エラー情報: {1} 。 \nRequestID:{2}\tHostID:{3}"、 ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } キャッチ (例外ex) { Console.WriteLine("Failed with error info: {0}" 、メッセージなど); }
アップロードされたオブジェクトにタグを追加するか、オブジェクトのタグを変更する
次のコードは、アップロードされたオブジェクトにタグを追加する方法、またはオブジェクトのタグを変更する方法の例を示しています。
Aliyun.OSSを使用した
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを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";
// OSSClientインスタンスを作成します。
var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret);
トライ
{
// オブジェクトに追加するタグを設定します。
var setRequest = new SetObjectTaggingRequest(bucketName, objectName);
var tag1=新しいタグ
{
キー="プロジェクト" 、
値="projectone"
};
var tag2=新しいタグ
{
キー="ユーザー" 、
値="jsmith"
};
setRequest.AddTag(tag1);
setRequest.AddTag(tag2);
client.SetObjectTagging(setRequest);
Console.WriteLine("set object tagging successed");
}
キャッチ (例外ex)
{
Console.WriteLine("set object tagging failed.") {0}"、例えばメッセージ);
}
オブジェクトをコピーするときにオブジェクトにタグを追加する
次のいずれかの方法を使用して、オブジェクトをコピーするときにオブジェクトのタグ付けを設定できます。
コピー: ソースオブジェクトのタグがコピー先オブジェクトにコピーされます。
置換: ターゲットオブジェクトには、ソースオブジェクトのタグではなく、リクエストで指定されたタグがあります。
次の例では、シンプルコピーモードで1 GB未満のオブジェクトに、マルチパートコピーモードで1 GBを超えるオブジェクトにタグを追加する方法について説明します。
次のコードでは、単純コピーを使用してオブジェクトをコピーするときに、サイズが1 GB未満のオブジェクトにタグを追加する方法の例を示します。
Aliyun.OSSを使用したAliyun.OSS.Common; を使用 Aliyun.OSS.Utilを使用します。System.Textを使用する。// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを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"); // ソースバケットの名前を指定します。 例: srcexamplebucket. var sourceBucket = "srcexamplebucket"; // ソースオブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: srcdir/scrobject.txt。 var sourceObject = "srcdir/scrobject.txt"; // 宛先バケットの名前を指定します。 宛先バケットは、ソースバケットと同じリージョンにある必要があります。 例: destbucket。 var targetBucket = "destbucket"; // 宛先オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: destdir/destobject.txt。 var targetObject = "destdir/destobject.txt"; 文字列UrlEncodeKey (文字列キー) { const文字列CharsetName = "utf-8"; const char separator = '/'; var segments = key分割 (セパレータ); var encodedKey = new StringBuilder(); encodedKey.Append(HttpUtils.EncodeUri(segments[0], CharsetName)); for (var i = 1; i < segments.Length; i ++) encodedKey.Append(separator).Append(HttpUtils.EncodeUri(segments[i], CharsetName)); if (key.EndsWith(separator.ToString())) { // String#splitは後続の空の文字列を無視します。たとえば、"a/b/" は2エントリの配列として分割され、 // 末尾のスラッシュをすべてuriに追加する必要があります。 foreach (キーのvar ch) { if (ch == separator) encodedKey.Append(separator); else break; } } encodedKey.ToString() を返します。} // OSSClientインスタンスを作成します。 var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret); トライ { var metadata = new ObjectMetadata(); metadata.AddHeader("mk1", "mv1"); metadata.AddHeader("mk2", "mv2"); // HTTPヘッダーのタグを設定します。 string str = UrlEncodeKey("key1") + "=" + UrlEncodeKey("value1") + "&" + UrlEncodeKey("key2") + "=" + UrlEncodeKey("value2"); メタデータAddHeader("x-oss-tagging" 、str); var req = new CopyObjectRequest(sourceBucket, sourceObject, targetBucket, targetObject) { // NewObjectMetadataの値がnullの場合、コピーモードを使用してソースオブジェクトのメタデータがコピーされます。 それ以外の場合は、置換モードを使用してソースオブジェクトのメタデータを上書きします。 NewObjectMetadata = metadata }; // オブジェクトをコピーします。 client.CopyObject(req); Console.WriteLine("オブジェクトのコピー成功"); } キャッチ (OssException ex) { Console.WriteLine("Failed with error code: {0}; エラー情報: {1} 。 \nRequestID: {2} \tHostID: {3}"、 ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } キャッチ (例外ex) { Console.WriteLine("Failed with error info: {0}" 、メッセージなど); }
次のコードでは、マルチパートコピーを使用してオブジェクトをコピーするときに、サイズが1 GBを超えるオブジェクトにタグを追加する方法の例を示します。
Aliyun.OSSを使用したAliyun.OSS.Common; を使用 Aliyun.OSS.Utilを使用します。System.Textを使用する。// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを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"); // ソースバケットの名前を指定します。 例: srcexamplebucket. var sourceBucket = "srcexamplebucket"; // ソースオブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: srcdir/scrobject.txt。 var sourceObject = "srcdir/scrobject.txt"; // 宛先バケットの名前を指定します。 宛先バケットは、ソースバケットと同じリージョンにある必要があります。 例: destbucket。 var targetBucket = "destbucket"; // 宛先オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: destdir/destobject.txt。 var targetObject = "destdir/destobject.txt"; var uploadId = ""; var partSize = 50*1024*1024; 文字列UrlEncodeKey (文字列キー) { const文字列CharsetName = "utf-8"; const char separator = '/'; var segments = key分割 (セパレータ); var encodedKey = new StringBuilder(); encodedKey.Append(HttpUtils.EncodeUri(segments[0], CharsetName)); for (var i = 1; i < segments.Length; i ++) encodedKey.Append(separator).Append(HttpUtils.EncodeUri(segments[i], CharsetName)); if (key.EndsWith(separator.ToString())) { // String#splitは後続の空の文字列を無視します。たとえば、"a/b/" は2エントリの配列として分割され、 // 末尾のスラッシュをすべてuriに追加する必要があります。 foreach (キーのvar ch) { if (ch == separator) encodedKey.Append(separator); else break; } } encodedKey.ToString() を返します。} // OSSClientインスタンスを作成します。 var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret); トライ { // マルチパートコピータスクを開始します。 InitiateMultipartUploadRequest操作を呼び出して、宛先オブジェクトのメタデータを指定できます。 var request = new InitiateMultipartUploadRequest(targetBucket, targetObject); var meta = new ObjectMetadata(); // HTTPヘッダーのタグを設定します。 string str = UrlEncodeKey("key1") + "=" + UrlEncodeKey("value1") + "&" + UrlEncodeKey("key2") + "=" + UrlEncodeKey("value2"); meta.AddHeader("x-oss-tagging" 、str); リクエスト。ObjectMetadata = meta; var result = client.InitiateMultipartUpload(request); // アップロードIDを表示します。 uploadId = result.UploadId; Console.WriteLine("Init multipart upload successful, Upload Id: {0}", result.UploadId); // Calculate the total number of parts. var metadata = client.GetObjectMetadata(sourceBucket, sourceObject); var fileSize = metadata.ContentLength; var partCount = (int)fileSize / partSize; if (fileSize % partSize != 0) { partCount++; } // マルチパートコピータスクを開始します。 var partETags = new List<PartETag>(); for (var i = 0; i < partCount; i++) { var skipBytes = (long)partSize * i; var size = (partSize < fileSize - skipBytes) ? partSize : (fileSize - skipBytes); // UploadPartCopyRequestオブジェクトを作成します。 UploadPartCopyRequestを使用して条件を指定できます。 var uploadPartCopyRequest = new UploadPartCopyRequest(targetBucket, targetObject, sourceBucket, sourceObject, uploadId) { PartSize = size, PartNumber = i + 1, // BeginIndexを使用して、パーツをコピーする開始位置を見つけます。 BeginIndex = skipBytes }; // UploadPartCopyメソッドを呼び出して、各パーツをコピーします。 var uploadPartCopyResult = client.UploadPartCopy(uploadPartCopyRequest); Console.WriteLine("UploadPartCopy : {0}", i); partETags.Add(uploadPartCopyResult.PartETag); } // マルチパートコピータスクを完了します。 var completeMultipartUploadRequest = new CompleteMultipartUploadRequest(targetBucket, targetObject, uploadId); // partETagsはpartETagsのリストです。 OSSは、partETagsを受け取った後、各パーツの有効性を検証します。 すべての部品が検証された後、OSSはこれらの部品を完全なオブジェクトに結合します。 foreach (var partETag in partETags) { completeMultipartUploadRequest.PartETags.Add(partETag); } var completeMultipartUploadResult = client.CompleteMultipartUpload(completeMultipartUploadRequest); Console.WriteLine("CompleteMultipartUpload successed"); } キャッチ (OssException ex) { Console.WriteLine("Failed with error code: {0}; エラー情報: {1} 。 \nRequestID: {2} \tHostID: {3}"、 ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } キャッチ (例外ex) { Console.WriteLine("Failed with error info: {0}" 、メッセージなど); }
シンボリックリンクにタグを追加する
次のサンプルコードは、シンボリックリンクにタグを追加する方法の例を示しています。
Aliyun.OSSを使用した
Aliyun.OSS.Utilを使用します。System.Textを使用する。// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを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 targetObjectName = "exampleobject.txt";
// シンボリックリンクの名前を指定します。 例: symlink.txt。
var symlinkObjectName = "symlink.txt";
var objectContent = "単なるクラウドではありません。";
文字列UrlEncodeKey (文字列キー)
{
const文字列CharsetName = "utf-8";
const char separator = '/';
var segments = key分割 (セパレータ);
var encodedKey = new StringBuilder();
encodedKey.Append(HttpUtils.EncodeUri(segments[0], CharsetName));
for (var i = 1; i < segments.Length; i ++)
encodedKey.Append(separator).Append(HttpUtils.EncodeUri(segments[i], CharsetName));
if (key.EndsWith(separator.ToString()))
{
// String#splitは後続の空の文字列を無視します。たとえば、"a/b/" は2エントリの配列として分割され、
// 末尾のスラッシュをすべてuriに追加する必要があります。
foreach (キーのvar ch)
{
if (ch == separator)
encodedKey.Append(separator);
else
break;
}
}
encodedKey.ToString() を返します。}
// OSSClientインスタンスを作成します。
var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret);
トライ
{
// Upload the object.
byte[] binaryData = Encoding.ASCII.GetBytes(objectContent);
MemoryStream requestContent = new MemoryStream(binaryData);
client.PutObject(bucketName, targetObjectName, requestContent);
var meta = new ObjectMetadata();
// HTTPヘッダーのタグを設定します。
string str = UrlEncodeKey("key1") + "=" + UrlEncodeKey("value1") + "&" + UrlEncodeKey("key2") + "=" + UrlEncodeKey("value2");
meta.AddHeader("x-oss-tagging" 、str);
var request = new CreateSymlinkRequest(bucketName, symlinkObjectName, targetObjectName);
リクエスト。ObjectMetadata = meta;
// シンボリックリンクを作成します。
client.CreateSymlink (リクエスト);
// シンボリックリンクを指すオブジェクトの名前を取得します。
var ossSymlink = client.GetSymlink(bucketName, symlinkObjectName);
Console.WriteLine("Target object is {0}", ossSymlink.Target);
}
キャッチ (例外ex)
{
Console.WriteLine("Failed with error info: {0}" 、メッセージなど);
}
参考資料
オブジェクトのタグ付けを設定するために呼び出すことができるAPI操作の詳細については、「PutObjectTagging」をご参照ください。