OSS SDK for C# は、Object Storage Service (OSS) の一般的なストレージ操作をサポートしています。このトピックでは、SDK のインストール、アクセス認証情報の設定、および基本的なバケットとオブジェクトの操作を行うためのサンプルプログラムの実行方法について説明します。
前提条件
Alibaba Cloud アカウントを登録し、本人確認を完了していることを確認してください。
使用するバケットのリージョンとエンドポイントを決定します。OSS でサポートされているリージョンとエンドポイントのマッピングについては、「リージョンとエンドポイント」をご参照ください。
SDK を追加してサンプルコードを実行できる C# プロジェクトを準備します。
ステップ 1: OSS SDK for C# のインストール
プロジェクトのターゲットフレームワークに一致するパッケージを選択します。.NET Framework の場合は Aliyun.OSS.SDK、.NET Core の場合は Aliyun.OSS.SDK.NetCore です。
Windows 環境でのインストール
NuGet を使用したインストール
Visual Studio に NuGet がインストールされていない場合は、まず NuGet をインストールします。
Visual Studio でプロジェクトを作成するか、既存のプロジェクトを開き、[ツール] > [NuGet パッケージマネージャー] > [ソリューションの NuGet パッケージの管理] を選択します。
aliyun.oss.sdk を検索します。検索結果で Aliyun.OSS.SDK または Aliyun.OSS.SDK.NetCore を見つけ、最新バージョンを選択して インストール をクリックします。
DLL を参照したインストール
GitHub 上の SDK リポジトリから .NET SDK パッケージをダウンロードして解凍します。
aliyun-oss-sdk プロジェクトをリリースモードでコンパイルして、DLL ライブラリを生成します。
Visual Studio で [ソリューションエクスプローラー] を開き、プロジェクトを選択し、プロジェクト名を右クリックして [参照] > [参照の追加] を選択します。表示されるダイアログボックスで、[参照] を選択します。
DLL ライブラリが生成された bin ディレクトリに移動し、Aliyun.OSS.dll ファイルを選択して OK をクリックします。
プロジェクトをインポートしたインストール
GitHub 上の SDK リポジトリから SDK パッケージまたはソースコードをダウンロードし、ソースコードから SDK をインストールする場合は、次の手順を実行します。
Visual Studio で、右クリックして ソリューション を選択し、表示されるショートカットメニューで [既存のプロジェクトを追加] をクリックします。
表示されるダイアログボックスで、aliyun-oss-sdk.csproj ファイルを選択し、[開く] をクリックします。
プロジェクト名を右クリックし、[参照] > [参照の追加] を選択します。表示されるダイアログボックスで、[プロジェクト] タブを選択し、aliyun-oss-sdk プロジェクトを選択して OK をクリックします。
UNIX または macOS 環境でのインストール
NuGet を使用して SDK をインストールするには、次の手順を実行します。
Xamarin でプロジェクトを作成するか、既存のプロジェクトを開き、[ツール] > [NuGet パッケージの追加] を選択します。
Aliyun.OSS.SDK または Aliyun.OSS.SDK.NetCore を検索し、最新バージョンを選択して [パッケージの追加] をクリックし、プロジェクトに追加します。
ステップ 2: アクセス認証情報の設定
OSS SDK for C# は、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数からアクセス認証情報を読み取ります。まず AccessKey ペアを作成し、その AccessKey ペアをこれらの環境変数に保存します。
RAM ユーザーの AccessKey ペアの作成
次のいずれかの方法を使用して、OSS の管理権限を持つ RAM ユーザーの AccessKey ペアを作成します。
RAM コンソール — 手順については、「OSS の管理権限を持つ RAM ユーザーの AccessKey ペアを作成する」をご参照ください。
ROS テンプレート — Resource Orchestration Service (ROS) テンプレートを使用して、OSS の管理権限を持つ RAM ユーザーの AccessKey ペアを迅速に作成します。ROS コンソールの [スタックの作成] ページで、[セキュリティの確認] の下にあるチェックボックスをオンにし、[作成] をクリックします。スタックが作成されたら、[出力] から作成された AccessKey ペアをコピーします。
環境変数の設定
RAM ユーザーの AccessKey ペアを使用して、開発環境のオペレーティングシステムで環境変数を設定します。
Linux
次のコマンドを実行して、環境変数の設定を
~/.bashrcファイルに追加します。
echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc次のコマンドを実行して、変更を適用します。
source ~/.bashrc環境変数が有効になっていることを確認します。
echo $OSS_ACCESS_KEY_ID
echo $OSS_ACCESS_KEY_SECRETmacOS
ターミナルで次のコマンドを実行して、デフォルトのシェルタイプを表示します。
echo $SHELLデフォルトのシェルタイプに基づいて環境変数を設定します。
Zsh
次のコマンドを実行して、環境変数の設定を
~/.zshrcファイルに追加します。
echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc次のコマンドを実行して、変更を適用します。
source ~/.zshrc環境変数が有効になっていることを確認します。
echo $OSS_ACCESS_KEY_ID
echo $OSS_ACCESS_KEY_SECRETBash
次のコマンドを実行して、環境変数の設定を
~/.bash_profileファイルに追加します。
echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile
echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile次のコマンドを実行して、変更を適用します。
source ~/.bash_profile環境変数が有効になっていることを確認します。
echo $OSS_ACCESS_KEY_ID
echo $OSS_ACCESS_KEY_SECRETWindows
CMD
CMD で次のコマンドを実行します。
setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"環境変数が有効になっていることを確認します。
echo %OSS_ACCESS_KEY_ID%
echo %OSS_ACCESS_KEY_SECRET%PowerShell
PowerShell で次のコマンドを実行します。
[Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
[Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)環境変数が有効になっていることを確認します。
[Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
[Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)上記のようにシステム環境変数を変更した後、IDE、コマンドラインインターフェイス、その他のデスクトップアプリケーション、バックグラウンドサービスなど、ビルド環境と実行環境を再起動またはリフレッシュして、最新のシステム環境変数がロードされるようにしてください。
ステップ 3: 基本的な OSS 操作の実行
以下のサンプルプログラムは、バケットの作成、オブジェクトのアップロード、ダウンロード、リスト表示、削除の方法を示しています。各サンプルは環境変数からアクセス認証情報を取得するため、サンプルプログラムを実行する前に OSS_ACCESS_KEY_ID と OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。サンプルプログラムを実行するには、次の手順に従います。
テストプロジェクトのディレクトリに main.cs ファイルを作成し、必要なサンプルコードを main.cs ファイルにコピーします。
サンプルコード内のプレースホルダーを実際の構成に置き換えます。
yourEndpoint: バケットが配置されているリージョンのエンドポイント。中国 (杭州) リージョンの場合、エンドポイントはhttps://oss-cn-hangzhou.aliyuncs.comです。yourRegion: バケットが配置されているリージョンの ID。たとえば、中国 (杭州) リージョンの場合はcn-hangzhouです。バケット名: サンプルでは
yourBucketNameまたはexamplebucketとなっています。オブジェクトの完全なパス (例:
exampledir/exampleobject.txt)。完全なパスにバケット名を含めることはできません。ローカルファイルの完全なパス (例:
D:\localpath\examplefile.txt)。ローカルパスを指定しない場合、オブジェクトはサンプルプログラムが属するプロジェクトのローカルパスからアップロードされるか、そこにダウンロードされます。ダウンロード時に指定されたローカルファイルが存在しない場合は、ファイルが作成されます。
次のコマンドを実行します。
dotnet script main.csバケットの作成
次のサンプルコードは、バケットを作成します。
using Aliyun.OSS;
// バケットが配置されているリージョンのエンドポイントに yourEndpoint を設定します。
var endpoint = "yourEndpoint";
// バケットが配置されているリージョンの ID に yourRegion を設定します。
var region = "yourRegion";
// 環境変数からアクセス認証情報を取得します。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケットの名前を指定します。
var bucketName = "yourBucketName";
// ClientConfiguration インスタンスを作成し、必要に応じてデフォルトのパラメーターを変更します。
var conf = new ClientConfiguration();
// V4 署名アルゴリズムを指定します。
conf.SignatureVersion = SignatureVersion.V4;
// OssClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
// バケットを作成します。
var bucket = client.CreateBucket(bucketName);
Console.WriteLine("Create bucket succeeded, {0} ", bucket.Name);
}
catch (Exception ex)
{
Console.WriteLine("Create bucket failed, {0}", ex.Message);
}バケットが作成されると、プログラムは Create bucket succeeded とバケット名を出力します。
オブジェクトのアップロード
次のサンプルコードは、ローカルファイルをオブジェクトとしてバケットにアップロードします。
using Aliyun.OSS;
// バケットが配置されているリージョンのエンドポイントに yourEndpoint を設定します。
var endpoint = "yourEndpoint";
// バケットが配置されているリージョンの ID に yourRegion を設定します。
var region = "yourRegion";
// 環境変数からアクセス認証情報を取得します。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケットの名前を指定します。
var bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。バケット名を含めることはできません。
var objectName = "exampledir/exampleobject.txt";
// アップロードするローカルファイルの完全なパスを指定します。
var localFilename = "D:\\localpath\\examplefile.txt";
// ClientConfiguration インスタンスを作成し、必要に応じてデフォルトのパラメーターを変更します。
var conf = new ClientConfiguration();
// V4 署名アルゴリズムを指定します。
conf.SignatureVersion = SignatureVersion.V4;
// OssClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
// オブジェクトをアップロードします。
var result = client.PutObject(bucketName, objectName, localFilename);
Console.WriteLine("Put object succeeded, ETag: {0} ", result.ETag);
}
catch (Exception ex)
{
Console.WriteLine("Put object failed, {0}", ex.Message);
}オブジェクトがアップロードされると、プログラムは Put object succeeded とオブジェクトの ETag を出力します。
オブジェクトのダウンロード
次のサンプルコードは、オブジェクトをローカルファイルにダウンロードします。
using Aliyun.OSS;
using Aliyun.OSS.Common;
// バケットが配置されているリージョンのエンドポイントに yourEndpoint を設定します。
var endpoint = "yourEndpoint";
// バケットが配置されているリージョンの ID に yourRegion を設定します。
var region = "yourRegion";
// 環境変数からアクセス認証情報を取得します。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケットの名前を指定します。
var bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。バケット名を含めることはできません。
var objectName = "exampledir/exampleobject.txt";
// オブジェクトをダウンロードするローカルファイルの完全なパスを指定します。
var downloadFilename = "D:\\localpath\\examplefile.txt";
// ClientConfiguration インスタンスを作成し、必要に応じてデフォルトのパラメーターを変更します。
var conf = new ClientConfiguration();
// V4 署名アルゴリズムを指定します。
conf.SignatureVersion = SignatureVersion.V4;
// OssClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
// オブジェクトをダウンロードします。
var result = client.GetObject(bucketName, objectName);
using (var requestStream = result.Content)
{
using (var fs = File.Open(downloadFilename, FileMode.OpenOrCreate))
{
int length = 4 * 1024;
var buf = new byte[length];
do
{
length = requestStream.Read(buf, 0, length);
fs.Write(buf, 0, length);
} while (length != 0);
}
}
Console.WriteLine("Get object succeeded");
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}オブジェクトがダウンロードされると、プログラムは Get object succeeded を出力し、オブジェクトのコンテンツがローカルファイルに書き込まれます。
オブジェクトのリスト表示
次のサンプルコードは、バケット内のオブジェクトをリスト表示します。
using Aliyun.OSS;
using Aliyun.OSS.Common;
// バケットが配置されているリージョンのエンドポイントに yourEndpoint を設定します。
var endpoint = "yourEndpoint";
// バケットが配置されているリージョンの ID に yourRegion を設定します。
var region = "yourRegion";
// 環境変数からアクセス認証情報を取得します。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケットの名前を指定します。
var bucketName = "examplebucket";
// ClientConfiguration インスタンスを作成し、必要に応じてデフォルトのパラメーターを変更します。
var conf = new ClientConfiguration();
// V4 署名アルゴリズムを指定します。
conf.SignatureVersion = SignatureVersion.V4;
// OssClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
var objects = new List<string>();
ObjectListing result = null;
string nextMarker = string.Empty;
do
{
var listObjectsRequest = new ListObjectsRequest(bucketName)
{
Marker = nextMarker,
};
// オブジェクトをリスト表示します。
result = client.ListObjects(listObjectsRequest);
foreach (var summary in result.ObjectSummaries)
{
Console.WriteLine(summary.Key);
objects.Add(summary.Key);
}
nextMarker = result.NextMarker;
} while (result.IsTruncated);
Console.WriteLine("List objects of bucket:{0} succeeded ", bucketName);
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}オブジェクトがリスト表示されると、プログラムは各オブジェクトの名前を出力し、次に List objects of bucket とバケット名を出力します。
オブジェクトの削除
次のサンプルコードは、バケットからオブジェクトを削除します。
using Aliyun.OSS;
// バケットが配置されているリージョンのエンドポイントに yourEndpoint を設定します。
var endpoint = "yourEndpoint";
// バケットが配置されているリージョンの ID に yourRegion を設定します。
var region = "yourRegion";
// 環境変数からアクセス認証情報を取得します。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケットの名前を指定します。
var bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。バケット名を含めることはできません。
var objectName = "exampledir/exampleobject.txt";
// ClientConfiguration インスタンスを作成し、必要に応じてデフォルトのパラメーターを変更します。
var conf = new ClientConfiguration();
// V4 署名アルゴリズムを指定します。
conf.SignatureVersion = SignatureVersion.V4;
// OssClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
// オブジェクトを削除します。
client.DeleteObject(bucketName, objectName);
Console.WriteLine("Delete object succeeded");
}
catch (Exception ex)
{
Console.WriteLine("Delete object failed, {0}", ex.Message);
}オブジェクトが削除されると、プログラムは Delete object succeeded を出力します。
よくある質問
OSS SDK の使用時に AccessDenied エラーが報告された場合の対処法は?
参考資料
OSS SDK for C# の詳細については、GitHub 上の SDK リポジトリをご参照ください。
その他の機能のコード例については、GitHub サンプルをご参照ください。