すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:追加アップロード (C# SDK V1)

最終更新日:Nov 29, 2025

追加アップロードは、AppendObject メソッドを使用して、既存の追加可能オブジェクトにコンテンツを追加します。

注意事項

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用します。 OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。 カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「初期化」をご参照ください。

  • ファイルが存在しない場合、AppendObject 操作を呼び出すと、追加可能オブジェクトが作成されます。

  • ファイルが存在する場合:

    • ファイルが追加可能オブジェクトであり、指定された追加位置がファイルの現在の長さと一致する場合、コンテンツはファイルの末尾に追加されます。

    • ファイルが追加可能オブジェクトであっても、指定された追加位置がファイルの現在の長さと一致しない場合、PositionNotEqualToLength 例外がスローされます。

    • ファイルが追加可能オブジェクトではない場合 (シンプルアップロードでアップロードされた通常オブジェクトなど)、ObjectNotAppendable 例外がスローされます。

権限

デフォルトでは、Alibaba Cloud アカウントはすべての権限を持っています。 Alibaba Cloud アカウント下の RAM ユーザーまたは RAM ロールは、デフォルトではいかなる権限も持っていません。 Alibaba Cloud アカウントまたはアカウント管理者は、RAM ポリシーまたはバケットポリシーを通じて操作権限を付与する必要があります。

API

アクション

定義

AppendObject

oss:PutObject

この操作を呼び出して、既存のオブジェクトにオブジェクトを追加することで、オブジェクトをアップロードできます。

oss:PutObjectTagging

既存のオブジェクトにオブジェクトを追加してアップロードする際に、x-oss-tagging を通じてオブジェクトタグを指定する場合は、この権限が必要です。

サンプルコード

次のコードは、追加アップロードを実行する方法の例を示しています。

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";
// ローカルファイルの完全なパスを指定します。 例: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);
// 最初の追加操作の位置は 0 です。 戻り値は、次の追加操作の位置です。 後続の追加操作の位置は、追加操作前のオブジェクトの長さです。
long position = 0;
try
{
    var metadata = client.GetObjectMetadata(bucketName, objectName);
    position = metadata.ContentLength;
}
catch (Exception) { }
try
{
    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);
    }
    // 追加位置を取得し、オブジェクトを再度追加します。
    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);
    }
}
catch (Exception ex)
{
    Console.WriteLine("Append object failed, {0}", ex.Message);
}

関連ドキュメント

  • 追加アップロードの完全なサンプルコードについては、「GitHub の例」をご参照ください。

  • 追加アップロードの API 操作の詳細については、「AppendObject」をご参照ください。