シンプルアップロードでは、PutObject メソッドを使用して単一のファイル (オブジェクト) をアップロードします。文字列やローカルファイルは、同期または非同期でアップロードできます。また、MD5 検証を使用して、アップロードプロセス中のデータ整合性を確保することもできます。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用します。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OssClient インスタンスを作成します。カスタムドメイン名または Security Token Service (STS) を使用して OssClient インスタンスを作成する場合は、「初期化」をご参照ください。
権限
デフォルトでは、Alibaba Cloud アカウントは完全な権限を持っています。Alibaba Cloud アカウント配下の RAM ユーザーまたは RAM ロールは、デフォルトではいかなる権限も持っていません。Alibaba Cloud アカウントまたはアカウント管理者は、RAM ポリシー または バケットポリシー を通じて操作権限を付与する必要があります。
API | アクション | 定義 |
PutObject |
| オブジェクトをアップロードします。 |
| オブジェクトのアップロード時に、 | |
| オブジェクトのアップロード時に、オブジェクトのメタデータに | |
|
文字列のアップロード
次のコードは、文字列を examplebucket バケット内の exampleobject.txt ファイルにアップロードする方法を示しています。
using System.Text;
using Aliyun.OSS;
using Aliyun.OSS.Common;
// バケットが所在するリージョンのエンドポイントに 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");
// バケット名を指定します。例:examplebucket。
var bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例:exampledir/exampleobject.txt。
var objectName = "exampledir/exampleobject.txt";
// 文字列を指定します。
var objectContent = "More than just cloud.";
// バケットが所在するリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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);
client.SetRegion(region);
try
{
byte[] binaryData = Encoding.ASCII.GetBytes(objectContent);
MemoryStream requestContent = new MemoryStream(binaryData);
// ファイルをアップロードします。
client.PutObject(bucketName, objectName, requestContent);
Console.WriteLine("Put object succeeded");
}
catch (Exception ex)
{
Console.WriteLine("Put object failed, {0}", ex.Message);
}ローカルファイルのアップロード
次のコードは、ローカルファイル examplefile.txt を examplebucket バケット内の exampleobject.txt ファイルにアップロードする方法を示しています。
using Aliyun.OSS;
using Aliyun.OSS.Common;
// バケットが所在するリージョンのエンドポイントに 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");
// バケット名を指定します。例:examplebucket。
var bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例:exampledir/exampleobject.txt。
var objectName = "exampledir/exampleobject.txt";
// ローカルファイルの完全なパスを指定します。ローカルパスを指定しない場合、ファイルはデフォルトでサンプルプログラムのプロジェクトに対応するローカルパスからアップロードされます。
var localFilename = "D:\\localpath\\examplefile.txt";
// バケットが所在するリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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);
client.SetRegion(region);
try
{
// ファイルをアップロードします。
client.PutObject(bucketName, objectName, localFilename);
Console.WriteLine("Put object succeeded");
}
catch (Exception ex)
{
Console.WriteLine("Put object failed, {0}", ex.Message);
}MD5 検証を使用したファイルのアップロード
クライアントから送信されたデータと OSS サーバーで受信したデータが同じであることを保証するために、Content-Md5 の値を ObjectMeta に追加します。OSS サーバーはこの MD5 ハッシュを検証に使用します。
MD5 検証はパフォーマンスを低下させる可能性があります。
次のコードは、ローカルファイルをアップロードする際に MD5 検証を実行する方法を示しています。
using System;
using System.IO;
using Aliyun.OSS;
using Aliyun.OSS.Util;
using Aliyun.OSS.Common;
// バケットが所在するリージョンのエンドポイントに 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");
// バケット名を指定します。例:examplebucket。
var bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例:exampledir/exampleobject.txt。
var objectName = "exampledir/exampleobject.txt";
// ローカルファイルの完全なパスを指定します。例:D:\\localpath\\examplefile.txt。ローカルパスを指定しない場合、ファイルはデフォルトでサンプルプログラムのプロジェクトに対応するローカルパスからアップロードされます。
var localFilename = "D:\\localpath\\examplefile.txt";
// バケットが所在するリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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);
client.SetRegion(region);
try
{
// MD5 ハッシュを計算します。
string md5;
using (var fs = File.Open(localFilename, FileMode.Open))
{
md5 = OssUtils.ComputeContentMd5(fs, fs.Length);
}
var objectMeta = new ObjectMetadata
{
ContentMd5 = md5
};
// ファイルをアップロードします。
client.PutObject(bucketName, objectName, localFilename, objectMeta);
Console.WriteLine("Put object succeeded");
}
catch (Exception ex)
{
Console.WriteLine("Put object failed, {0}", ex.Message);
}非同期アップロード
次のコードは、ローカルファイル examplefile.txt を examplebucket バケット内の exampleobject.txt ファイルに非同期でアップロードする方法を示しています。非同期アップロードを実行する場合、独自のコールバックハンドラ関数を実装する必要があります。
using System;
using System.IO;
using System.Threading;
using Aliyun.OSS;
using Aliyun.OSS.Common;
// 非同期アップロード。
namespace AsyncPutObject
{
class Program
{
// バケットが所在するリージョンのエンドポイントに yourEndpoint を設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
static string 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");
// バケット名を指定します。例:examplebucket。
static string bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例:exampledir/exampleobject.txt。
static string objectName = "exampledir/exampleobject.txt";
// ローカルファイルの完全なパスを指定します。例:D:\\localpath\\examplefile.txt。ローカルパスを指定しない場合、ファイルはデフォルトでサンプルプログラムのプロジェクトに対応するローカルパスからアップロードされます。
static string localFilename = "D:\\localpath\\examplefile.txt";
static AutoResetEvent _event = new AutoResetEvent(false);
// バケットが所在するリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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);
client.SetRegion(region);
private static void PutObjectCallback(IAsyncResult ar)
{
try
{
client.EndPutObject(ar);
Console.WriteLine(ar.AsyncState as string);
Console.WriteLine("Put object succeeded");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
_event.Set();
}
}
public static void AsyncPutObject()
{
try
{
using (var fs = File.Open(localFilename, FileMode.Open))
{
var metadata = new ObjectMetadata();
// カスタムメタデータを追加します。
metadata.UserMetadata.Add("mykey1", "myval1");
metadata.UserMetadata.Add("mykey2", "myval2");
metadata.CacheControl = "No-Cache";
metadata.ContentType = "text/txt";
string result = "Notice user: put object finish";
// 非同期アップロード。
client.BeginPutObject(bucketName, objectName, fs, metadata, PutObjectCallback, result.ToCharArray());
_event.WaitOne();
}
}
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);
}
}
static void Main(string[] args)
{
Program.AsyncPutObject();
}
}
}