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

Object Storage Service:バージョン管理されたオブジェクトの管理

最終更新日:Jul 29, 2026

バケットのバージョン管理を有効にすると、既存のオブジェクトのコンテンツとアクセス制御リスト (ACL) は保持されます。バージョン管理により、誤った上書きや削除を防ぎ、オブジェクトの履歴バージョンをクエリして復元できます。

注意事項

バージョン管理が有効なバケットでオブジェクトのアップロード、一覧表示、ダウンロード、削除、または復元を行う際、オブジェクトを別のストレージクラスに移行するライフサイクルルールは、新しいバージョンを作成しません。詳細については、「バージョン管理」をご参照ください。

オブジェクトのアップロード

バージョン管理が有効なバケットにオブジェクトをアップロードすると、Object Storage Service (OSS) は自動的に新しいバージョンを作成します。同じ名前のオブジェクトが既に存在する場合、既存のオブジェクトは履歴バージョンとして保持され、新しくアップロードされたオブジェクトが最新バージョンになります。

OSS コンソールを使用する

  1. OSS コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、バケット をクリックします。[バケット] ページで、対象のバケットを見つけてクリックします。

  3. 左側のナビゲーションウィンドウで、オブジェクト管理 > オブジェクト を選択します。

  4. オブジェクト ページで、アップロード をクリックします。

  5. アップロード パネルで、次のパラメーターを設定します。

    1. 基本オプションを設定します。

      パラメーター

      説明

      アップロード先

      オブジェクトのストレージパスを指定します。

      • カレントディレクトリ:オブジェクトを現在のディレクトリにアップロードします。

      • ディレクトリを指定する:オブジェクトを指定したディレクトリにアップロードします。ディレクトリ名を入力する必要があります。ディレクトリが存在しない場合、OSS は自動的にディレクトリを作成し、オブジェクトをアップロードします。

        ディレクトリ名は、次の要件を満たす必要があります:

        • 名前の長さは 1~254 文字で、UTF-8 でエンコードされている必要があります。

        • 名前の先頭にスラッシュ (/) またはバックスラッシュ (\) を使用することはできません。

        • 名前に連続するスラッシュ (/) を含めることはできません。

        • 名前を 2 つの連続するピリオド (..) にすることはできません。

      ファイル ACL

      オブジェクトのアクセス制御リスト (ACL) を設定します。

      • バケットから継承:オブジェクトはバケットの ACL を継承します。

      • 非公開 (推奨):オブジェクトの所有者のみがオブジェクトに対する読み取りおよび書き込み権限を持ちます。他のユーザーはオブジェクトにアクセスできません。

      • 公開読み取り:オブジェクトの所有者はオブジェクトに対する読み取りおよび書き込み権限を持ちます。匿名ユーザーを含む他のユーザーは、オブジェクトに対する読み取り権限のみを持ちます。これにより、データ漏えいや予期せぬ高額な料金が発生する可能性があります。注意して進めてください。

      • 公開読み書き:匿名ユーザーを含むすべてのユーザーがオブジェクトの読み取りと書き込みを行えます。この設定は、悪意のあるユーザーがオブジェクトに不正なコンテンツを書き込む可能性があるため、重大なセキュリティリスクをもたらします。絶対に必要な場合を除き、パブリック読み書き権限を付与しないでください。

      詳細については、「オブジェクト ACL」をご参照ください。

      アップロードするファイル

      アップロードするファイルまたはフォルダーを選択します。

      ファイルの選択 または フォルダーの選択 をクリックして、ローカルのファイルまたはフォルダーを選択します。ファイルやフォルダーを アップロードするファイル エリアにドラッグすることもできます。

      選択したフォルダーにアップロードしたくないファイルが含まれている場合は、リストでそのファイルを見つけ、操作 列の 削除 をクリックします。

      重要
      • バージョン管理が無効になっているバケットにオブジェクトをアップロードし、そのオブジェクトが既存のオブジェクトと同じ名前である場合、既存のオブジェクトは上書きされます。

      • バージョン管理が有効になっているバケットにオブジェクトをアップロードし、そのオブジェクトが既存のオブジェクトと同じ名前である場合、新しいオブジェクトが最新バージョンになり、既存のオブジェクトは履歴バージョンになります。

    2. 任意: 詳細設定 の右側にある image.png アイコンをクリックして、ストレージクラスやサーバー側の暗号化などの詳細オプションを設定します。

      パラメーター

      説明

      ストレージクラス

      オブジェクトのストレージクラスを設定します。有効な値:

      • バケットから継承 (デフォルト):オブジェクトはバケットのストレージクラスを継承します。

      • スタンダード頻繁にアクセスされるデータに対して、信頼性、高可用性、高性能なオブジェクトストレージを提供します。このストレージクラスは、ソーシャルおよび共有画像アプリケーション、オーディオおよびビデオアプリケーション、大規模なウェブサイト、ビッグデータ分析など、さまざまなシナリオに適しています。標準ストレージクラスは、ゾーン冗長ストレージ (ZRS) とローカル冗長ストレージ (LRS) をサポートします。

      • 低頻度アクセス (IA)より低いストレージコストで、耐久性の高いオブジェクトストレージサービスを提供します。このストレージクラスには、最小課金サイズ 64 KB と最小ストレージ期間 30 日があります。データはリアルタイムでアクセスできますが、データ取得料金が適用されます。このストレージクラスは、平均して月に 1〜2 回など、アクセス頻度が低いシナリオに適しています。IA ストレージクラスは、ゾーン冗長ストレージとローカル冗長ストレージをサポートします。

      • アーカイブ非常に低いストレージコストで、耐久性の高いオブジェクトストレージサービスを提供します。このストレージクラスには、最小課金サイズ 64 KB と最小ストレージ期間 60 日があります。アーカイブオブジェクトには、最初に復元する (約 1 分かかります) か、直接アクセスすることでアクセスできます。復元と直接読み取りの両方に料金が適用されます。このストレージクラスは、アーカイブデータ、医療画像、科学資料、ビデオ映像など、長期的なデータアーカイブシナリオに適しています。アーカイブストレージクラスは、ゾーン冗長ストレージとローカル冗長ストレージをサポートします。

      • コールドアーカイブアーカイブよりも低いストレージコストで、耐久性の高いオブジェクトストレージサービスを提供します。このストレージクラスには、最小課金サイズ 64 KB と最小ストレージ期間 180 日があります。コールドアーカイブオブジェクトは、アクセスする前に復元する必要があります。復元時間はオブジェクトのサイズと復元モードによって異なります。復元にはデータ取得料金とリクエスト料金が発生します。このストレージクラスは、コンプライアンス目的で長期保持が必要なデータ、ビッグデータや AI 分野で蓄積された生データ、映画・テレビ業界の長期メディアアセット、オンライン教育業界のアーカイブビデオなど、コールドデータを長期間保存するのに適しています。コールドアーカイブストレージクラスは、ローカル冗長ストレージのみをサポートします。

      • ディープコールドアーカイブコールドアーカイブよりも低いストレージコストで、耐久性の高いオブジェクトストレージサービスを提供します。このストレージクラスには、最小課金サイズ 64 KB と最小ストレージ期間 180 日があります。ディープコールドアーカイブオブジェクトは、アクセスする前に復元する必要があります。復元時間はオブジェクトのサイズと復元モードによって異なります。復元にはデータ取得料金とリクエスト料金が発生します。このストレージクラスは、ビッグデータや AI 分野で蓄積された生データ、長期メディアアセット、規制およびコンプライアンスアーカイブ、テープの置き換えなど、極めてコールドなデータを長期間保存するのに適しています。ディープコールドアーカイブストレージクラスは、ローカル冗長ストレージのみをサポートします。

      ストレージクラス

      暗号化の方法

      オブジェクトのサーバー側暗号化方式を設定します。有効な値:

      • バケットから継承 (デフォルト):オブジェクトはバケットのサーバー側暗号化方式を継承します。

      • OSS マネージド:OSS は、OSS が管理する一意のキーで各オブジェクトを暗号化します。さらに保護を強化するため、これらのキー自体もマスターキーで暗号化されます。

      • KMS:Key Management Service (KMS) が管理するデフォルトのカスタマーマスターキー (CMK) または指定された CMK を使用して暗号化と復号を行います。

        KMS 暗号化を使用するには、まず KMS を有効化してください。詳細については、「専用 KMS インスタンスの購入」をご参照ください。

        以下は CMK パラメーターの説明です:

        暗号化キーは <alias>(CMK ID) 形式で、<alias> は CMK のエイリアス、CMK ID は CMK の ID です。有効な値:

        • alias/acs/oss(CMK ID):デフォルトの KMS マネージド CMK を使用して、異なるオブジェクトを暗号化するための異なるキーを生成します。オブジェクトはダウンロード時に自動的に復号されます。

        • alias/<cmkname>(CMK ID):このオプションは、指定された CMK を使用して各オブジェクトに一意の暗号化キーを生成します。オブジェクトのメタデータには CMK ID が保存されます。必要な権限を持つユーザーがオブジェクトをダウンロードすると、OSS は自動的にそれを復号します。<cmkname> は、CMK 作成時に指定したオプションの CMK エイリアスです。

          指定された CMK ID を使用する前に、KMS コンソールでバケットと同じリージョンに通常のキーまたは外部キーを作成してください。詳細については、「CMK の作成」をご参照ください。

      • 暗号化アルゴリズムAES256 のみがサポートされています。

      ユーザー定義のメタデータ

      オブジェクトに説明情報を追加します。複数のユーザー定義メタデータエントリを追加できます。すべてのユーザー定義メタデータの合計サイズは 8 KB を超えることはできません。各ユーザー定義メタデータキーには、プレフィックス x-oss-meta- を付け、値を割り当てる必要があります。例:x-oss-meta-location:hangzhou

    3. アップロード をクリックします。

      タスクリスト パネルの タスクのアップロード タブで、各ファイルのアップロード進捗を確認できます。

Alibaba Cloud SDK を使用する

以下のコードは、バージョン管理が有効なバケットにオブジェクトをアップロードします。他の SDK については、「SDK の概要」をご参照ください。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.io.ByteArrayInputStream;

public class Demo {
    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントを使用します。実際の環境に合わせてエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケット名を指定します。例:examplebucket。
        String bucketName = "examplebucket";
        // オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。
        String objectName = "exampledir/object";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";

        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // この例では、文字列をオブジェクトとしてアップロードします。
            String content = "Hello OSS";
            PutObjectResult result = ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));
            // オブジェクトのバージョン ID を表示します。
            System.out.println("result.versionid: " + result.getVersionId());
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}
const OSS = require('ali-oss');

const client = new OSS({
  // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを oss-cn-hangzhou に設定します。
  region: 'yourregion',
  // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // バケット名を指定します。
  bucket: 'yourbucketname'
});

async function put() {
  const result = await client.put('fileName', path.normalize('D:\\localpath\\examplefile.txt'));
  console.log(result.res.headers['x-oss-version-id']); // アップロードされたオブジェクトのバージョン ID を表示します。
}
put();
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");
// bucketName をバケットの名前に設定します。例:examplebucket。
var bucketName = "examplebucket";
// objectName をオブジェクトの完全なパスに設定します。完全なパスにバケット名を含めることはできません。例:exampledir/exampleobject.txt。
var objectName = "exampleobject.txt";
var objectContent = "More than just cloud.";
// region をバケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、region を 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
{
    byte[] binaryData = Encoding.ASCII.GetBytes(objectContent);
    MemoryStream requestContent = new MemoryStream(binaryData);
    // オブジェクトをアップロードします。
    var result = client.PutObject(bucketName, objectName, requestContent);
    Console.WriteLine("Put object succeeded versionid : {0}", result.VersionId);
}
catch (Exception ex)
{
    Console.WriteLine("Put object failed, {0}", ex.Message);
}
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* OSS アカウント情報を初期化します。*/
            
    /* yourEndpoint をバケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
    std::string Endpoint = "yourEndpoint";
    /* yourRegion をバケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。*/
    std::string Region = "yourRegion";
    /* バケット名を指定します。例:examplebucket。*/
    std::string BucketName = "examplebucket";
    /* オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例:exampledir/exampleobject.txt。*/
    std::string ObjectName = "exampledir/exampleobject.txt";

    /* ネットワークリソースを初期化します。*/
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);
    std::shared_ptr<std::iostream> content = std::make_shared<std::stringstream>();
    *content << "test cpp sdk";
    PutObjectRequest request(BucketName, ObjectName, content);

    /* ファイルをアップロードします。*/
    auto outcome = client.PutObject(request);

    if (outcome.isSuccess()) {
        std::cout << "versionid:" << outcome.result().VersionId() << std::endl;
    }
    else {
        /* 例外を処理します。*/
        std::cout << "PutObject fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* ネットワークリソースを解放します。*/
    ShutdownSdk();
    return 0;
}
package main

import (
	"context"
	"flag"
	"log"
	"strings"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// グローバル変数を指定します。
var (
	region     string // バケットが配置されているリージョン。
	bucketName string // バケット名。
	objectName string // オブジェクト名。
)

// パラメーターを初期化するために使用される init 関数を定義します。
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
	flag.StringVar(&objectName, "object", "", "The name of the object.")
}

func main() {
	// コマンドラインパラメーターを解析します。
	flag.Parse()

	// バケット名が空かどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// リージョンが空かどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// オブジェクト名が空かどうかを確認します。
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, object name required")
	}

	// アップロードするコンテンツを指定します。
	content := "hi oss"

	// デフォルト設定をロードし、認証情報プロバイダーとリージョンを指定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// オブジェクトをアップロードするリクエストを作成します。
	request := &oss.PutObjectRequest{
		Bucket: oss.Ptr(bucketName),        // バケット名。
		Key: oss.Ptr(objectName),        // オブジェクト名。
		Body:   strings.NewReader(content), // アップロードするコンテンツ。
	}

	// オブジェクトをアップロードするリクエストを実行します。
	result, err := client.PutObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to put object %v", err)
	}

	// オブジェクトのバージョン ID を表示します。
	log.Printf("put object result versionId:%#v\n", *result.VersionId)
}
import argparse
import requests
import alibabacloud_oss_v2 as oss

# コマンドライン引数パーサーを作成します。
parser = argparse.ArgumentParser(description="put object sample")
# バケットが配置されているリージョンを指定するための --region コマンドライン引数を設定します。この引数は必須です。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# バケット名を指定するための --bucket コマンドライン引数を設定します。この引数は必須です。
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定するための --endpoint コマンドライン引数を設定します。この引数はオプションです。
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
# オブジェクト名を指定するための --key コマンドライン引数を設定します。この引数は必須です。
parser.add_argument('--key', help='The name of the object.', required=True)

def main():
    args = parser.parse_args()  # コマンドライン引数を解析します。

    # 認証のために環境変数からアクセス認証情報を取得します。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト設定を取得し、認証情報プロバイダーを指定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    # バケットが配置されているリージョンを指定します。
    cfg.region = args.region
    # endpoint パラメーターが指定されている場合は、エンドポイントを指定します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 設定を使用して OSSClient インスタンスを作成します。
    client = oss.Client(cfg)

    # ローカルファイルをアップロードします。
    local_file_path = '/yourLocalFilePath/yourFileName'
    with open(local_file_path, 'rb') as file:
        data = file.read()

    # オブジェクトをアップロードするリクエストを実行し、バケット名、オブジェクト名、データコンテンツを指定します。
    result = client.put_object(oss.PutObjectRequest(
        bucket=args.bucket,
        key=args.key,
        body=data,
    ))

    # レスポンスの HTTP ステータスコード、リクエスト ID、およびオブジェクトの MD5 ハッシュ、ETag、CRC-64 値、バージョン ID を表示して、リクエストが成功したかどうかを確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' content md5: {result.content_md5},'
          f' etag: {result.etag},'
          f' hash crc64: {result.hash_crc64},'
          f' version id: {result.version_id},'
    )

if __name__ == "__main__":
    main()  # スクリプトのエントリポイント。スクリプトが直接実行されるときに main() 関数を呼び出します。
<?php

// 依存関係をロードするために autoload ファイルをインクルードします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドラインパラメーターを記述します。
$optsdesc = [
    "region" => ['help' => 'The region in which the bucket is located', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => 'The domain names that other services can use to access OSS', 'required' => False], // (オプション) OSS エンドポイントを指定します。
    "bucket" => ['help' => 'The name of the bucket', 'required' => True], // (必須) バケット名を指定します。
    "key" => ['help' => 'The name of the object', 'required' => True], // (必須) オブジェクト名を指定します。
];

// コマンドラインパラメーターを解析するための長いオプションのリストを生成します。
$longopts = \array_map(function ($key) {
    return "$key:"; // 各パラメーターの末尾にコロン (:) を追加して、値が必要であることを示します。
}, array_keys($optsdesc));

// コマンドラインパラメーターを解析します。
$options = getopt("", $longopts);

// 必須パラメーターが欠落しているかどうかを確認します。
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help'];
        echo "Error: the following arguments are required: --$key, $help"; // 必須だが欠落しているパラメーターを表示します。
        exit(1);
    }
}

// コマンドラインパラメーターの値を取得し、変数に割り当てます。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケット名。
$key = $options["key"]; // オブジェクト名。

// 環境変数から AccessKey ID と AccessKey Secret をロードします。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト設定を使用します。
$cfg = Oss\Config::loadDefault();

// 認証情報プロバイダーを指定します。
$cfg->setCredentialsProvider($credentialsProvider);

// リージョンを指定します。
$cfg->setRegion($region);

// エンドポイントが指定されている場合は、エンドポイントを指定します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);

// アップロードするデータを指定します。
$data = 'Hello OSS';

// 簡単なアップロードリクエストを作成します。
$request = new Oss\Models\PutObjectRequest(
                bucket: $bucket,
                key: $key,
            );

// リクエストボディをデータストリームに設定します。
$request->body = Oss\Utils::streamFor($data);

// putObject メソッドを使用してデータをアップロードします。
$result = $client->putObject($request);

// 返された結果を表示します。
printf(
    'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。
    'request id:' . $result->requestId . PHP_EOL . // リクエスト ID。
    'etag:' . $result->etag . PHP_EOL // オブジェクトの ETag。
);

ossutil を使用する

ossutil を使用してバージョン管理が有効なバケットにオブジェクトをアップロードするには、「cp (オブジェクトのアップロード)」をご参照ください。

REST API を使用する

REST API を直接呼び出すこともできます。詳細については、「PutObject」をご参照ください。

オブジェクトの一覧表示

バージョン管理が有効なバケットでは、GetBucketVersions (ListObjectVersions) を呼び出して、削除マーカーが付いたオブジェクトを含むすべてのオブジェクトバージョンの情報を取得します。

  • GetBucket (ListObject) 操作は、最新のオブジェクトバージョンのみを返し、削除マーカーが付いたオブジェクトは除外します。

  • 1 回の GetBucketVersions (ListObjectVersions) リクエストで返されるオブジェクトバージョンは最大 1,000 件です。すべてのバージョンを取得するには、複数のリクエストを送信してください。

    たとえば、バケットに example.jpgphoto.jpg の 2 つのキーが含まれており、example.jpg には 900 バージョン、photo.jpg には 500 バージョンがある場合、1 回のリクエストで example.jpg の全 900 バージョンと photo.jpg の最初の 100 バージョンが一覧表示されます。結果はキーの辞書順にソートされ、その後バージョン順にソートされます。

GetBucketVersions (ListObjectVersions) は、削除マーカーが付いたオブジェクトを含む、バケット内のすべてのオブジェクトのすべてのバージョンを返します。GetBucket (ListObject) は、最新のオブジェクトバージョンのみを返し、削除マーカーが付いたオブジェクトは除外します。

OSS コンソール

  1. OSS コンソールにログインします。

  2. バケット をクリックし、対象のバケット名をクリックします。

    このページには、各オブジェクトの最新バージョンのページ分割されたリストが表示されます。削除マーカーを含むすべてのバージョンを表示するには、オブジェクト ページに移動し、以前のバージョン の横にある 表示 をクリックします。

OSS SDK

以下のコードは、バージョン管理が有効なバケット内のオブジェクトを一覧表示します。他の SDK については、「SDK の概要」をご参照ください。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;

public class Demo {
    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントを使用します。実際の環境に合わせてエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケット名を指定します。例:examplebucket。
        String bucketName = "examplebucket";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";

        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // バケット内の削除マーカーを含むすべてのオブジェクトのバージョンを一覧表示します。
            String nextKeyMarker = null;
            String nextVersionMarker = null;
            VersionListing versionListing = null;
            do {
                ListVersionsRequest listVersionsRequest = new ListVersionsRequest()
                        .withBucketName(bucketName)
                        .withKeyMarker(nextKeyMarker)
                        .withVersionIdMarker(nextVersionMarker);

                versionListing = ossClient.listVersions(listVersionsRequest);
                for (OSSVersionSummary ossVersion : versionListing.getVersionSummaries()) {
                    System.out.println("key name: " + ossVersion.getKey());
                    System.out.println("versionid: " + ossVersion.getVersionId());
                    System.out.println("Is latest: " + ossVersion.isLatest());
                    System.out.println("Is delete marker: " + ossVersion.isDeleteMarker());
                }

                nextKeyMarker = versionListing.getNextKeyMarker();
                nextVersionMarker = versionListing.getNextVersionIdMarker();
            } while (versionListing.isTruncated());
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}
const OSS = require("ali-oss");

const client = new OSS({
  // region をバケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、region を oss-cn-hangzhou に設定します。
  region: 'yourregion',
  // 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // バケット名を指定します。
  bucket: 'yourbucketname'
});

// 削除マーカーを含むすべてのオブジェクトのバージョン情報を一覧表示します。
async function getObjectVersions() {
  let nextKeyMarker = null;
  let nextVersionMarker = null;
  let versionListing = null;
  do {
    versionListing = await client.getBucketVersions({
      keyMarker: nextKeyMarker,
      versionIdMarker: nextVersionMarker,
    });

    versionListing.objects.forEach((o) => {
      console.log(`${o.name}, ${o.versionId}`);
    });
    versionListing.deleteMarker.forEach((o) => {
      console.log(`${o.name}, ${o.versionId}`);
    });

    nextKeyMarker = versionListing.NextKeyMarker;
    nextVersionMarker = versionListing.NextVersionIdMarker;
  } while (versionListing.isTruncated);
}

getObjectVersions();
import argparse
import alibabacloud_oss_v2 as oss

# コマンドライン引数パーサーを作成し、スクリプトの目的を記述します。
parser = argparse.ArgumentParser(description="list object versions sample")

# バケットが配置されているリージョンを示す --region パラメーターを指定します。このパラメーターは必須です。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# バケット名を示す --bucket パラメーターを指定します。このパラメーターは必須です。
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# バケットが配置されているリージョンのエンドポイントを示す --endpoint パラメーターを指定します。このパラメーターはオプションです。
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
    # コマンドライン引数を解析して、指定された値を取得します。
    args = parser.parse_args()

    # 環境変数から、OSS へのアクセスに必要な認証情報をロードします。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # デフォルト設定を使用して cfg オブジェクトを作成し、認証情報プロバイダーを指定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region

    # カスタムエンドポイントが指定されている場合は、cfg オブジェクトの endpoint 属性を指定されたエンドポイントで更新します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 上記の設定を使用して OSSClient インスタンスを初期化します。
    client = oss.Client(cfg)

    # ページごとにオブジェクトバージョンを一覧表示するために使用される Paginator オブジェクトを作成します。
    paginator = client.list_object_versions_paginator()

    # ページを反復処理します。
    for page in paginator.iter_page(oss.ListObjectVersionsRequest(
            bucket=args.bucket,  # バケット名。
        )
    ):
        # 現在のページのオブジェクトバージョンを反復処理します。
        for o in page.version:
            # 各オブジェクトバージョンに関する次の情報を出力します:
            # - key:オブジェクトキー。
            # - size:オブジェクトサイズ (バイト)。
            # - version_id:バージョン ID。
            # - last_modified:最終更新日時。
            print(f'Object version: {o.key}, Size: {o.size}, Version_id: {o.version_id}, Last_modified: {o.last_modified}')


# スクリプトが直接実行されるときに、main 関数を呼び出して処理ロジックを開始します。
if __name__ == "__main__":
    main()  # スクリプトのエントリポイントを指定します。制御フローはここから始まります。

ossutil

ossutil を使用してバージョン管理が有効なバケット内のオブジェクトを一覧表示するには、「ls (アカウントレベルでリソースを一覧表示)」をご参照ください。

RESTful API

REST API を直接呼び出すこともできます。詳細については、「ListObjectVersions (GetBucketVersions)」をご参照ください。

オブジェクトのダウンロード

オブジェクトの最新バージョンまたは特定のバージョンをダウンロードできます。

バージョン ID を指定しない GET リクエストは、最新バージョンを返します。

最新バージョンに削除マーカーが付いている場合、GET リクエストは 404 Not Found を返します。

バージョン ID を指定した GET リクエストは、指定された履歴バージョンを返します。

OSS コンソールを使用する

  1. OSS コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、バケット をクリックします。[バケット] ページで、対象のバケットを見つけてクリックします。

  3. 左側のナビゲーションウィンドウで、オブジェクト管理 > オブジェクト を選択します。

  4. オブジェクト ページで、以前のバージョン の右側にある 表示 をクリックします。

  5. ダウンロードしたいオブジェクトのバージョンをクリックします。表示されるパネルで、オブジェクト URL の右側にある ダウンロード をクリックします。

OSS SDK を使用する

以下のコードは、バージョン管理が有効なバケットからオブジェクトをダウンロードします。他の SDK については、「SDK の概要」をご参照ください。

const OSS = require('ali-oss');

const client = new OSS({
  // yourregion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンの場合、Region を oss-cn-hangzhou に設定します。
  region: 'yourregion',
  // 環境変数からアクセス認証情報を取得します。このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // yourbucketname をバケットの名前に設定します。
  bucket: 'yourbucketname'
});

async function get() {
  // ファイル名。
  const result = await client.get('filename', {    
      // ダウンロードするファイルのバージョン ID。
      versionId: 'versionid',
  });
  console.log(result.content);
}
get();
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* OSS アカウント情報を初期化します。*/
            
    /* yourEndpoint をバケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
    std::string Endpoint = "yourEndpoint";
    /* yourRegion をバケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、Region を cn-hangzhou に設定します。*/
    std::string Region = "yourRegion";
    /* バケット名を指定します。例:examplebucket。*/
    std::string BucketName = "examplebucket";
    /* オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例:exampledir/exampleobject.txt。*/
    std::string ObjectName = "exampledir/exampleobject.txt";

    /* ネットワークリソースを初期化します。*/
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* ファイルをローカルメモリにダウンロードします。*/
    GetObjectRequest request(BucketName, ObjectName);
    request.setVersionId("yourObjectVersionId");
    auto outcome = client.GetObject(request);
    if (outcome.isSuccess()) {
        std::cout << "getObjectToBuffer" << " success, Content-Length:" << outcome.result().Metadata().ContentLength() << std::endl;
        /* ダウンロードしたオブジェクトのコンテンツを読み取ります。*/
        std::string content;
        *(outcome.result().Content()) >> content;
        std::cout << "getObjectToBuffer" << "content:" << content << std::endl;
        /* ダウンロードしたオブジェクトのバージョン ID を表示します。*/
        std::cout << "versionid:" << outcome.result().VersionId() << std::endl;
    }
    else {
            /* 例外を処理します。*/
            std::cout << "getObjectToBuffer fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* ネットワークリソースを解放します。*/
    ShutdownSdk();
    return 0;
}
import argparse
import alibabacloud_oss_v2 as oss

# コマンドラインパラメーターパーサーを作成します
parser = argparse.ArgumentParser(description="get object sample")

# バケットが配置されているリージョンを示す --region パラメーターを指定します。このパラメーターは必須です。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# バケット名を指定する --bucket パラメーターを指定します。このコマンドラインパラメーターは必須です。
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# バケットが配置されているリージョンのエンドポイントを示す --endpoint パラメーターを指定します。このパラメーターはオプションです。
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
# オブジェクト名を指定する --key パラメーターを指定します。このコマンドラインパラメーターは必須です。
parser.add_argument('--key', help='The name of the object.', required=True)
# ソースオブジェクトのバージョン ID を指定する --version_id パラメーターを指定します。このコマンドラインパラメーターは必須です。
parser.add_argument('--version_id', help='The version ID of the object.', required=True)

def main():
    # コマンドラインパラメーターを解析します。
    args = parser.parse_args()

    # 認証のために環境変数からアクセス認証情報を取得します。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト設定をロードし、認証情報プロバイダーを指定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # バケットが配置されているリージョンを指定します。
    cfg.region = args.region

    # endpoint パラメーターが指定されている場合は、エンドポイントを指定します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 設定を使用して OSSClient インスタンスを作成します。
    client = oss.Client(cfg)

    # オブジェクトをダウンロードするリクエストを実行し、バケット名とオブジェクト名を指定します。
    result = client.get_object(oss.GetObjectRequest(
        bucket=args.bucket,  # バケット名を指定します。
        key=args.key,  # オブジェクト名を指定します。
        version_id=args.version_id, # バージョン ID を指定します。
    ))

    # レスポンスを表示して、リクエストが成功したかどうかを確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' content length: {result.content_length},'
          f' content range: {result.content_range},'
          f' content type: {result.content_type},'
          f' etag: {result.etag},'
          f' last modified: {result.last_modified},'
          f' content md5: {result.content_md5},'
          f' cache control: {result.cache_control},'
          f' content disposition: {result.content_disposition},'
          f' content encoding: {result.content_encoding},'
          f' expires: {result.expires},'
          f' hash crc64: {result.hash_crc64},'
          f' storage class: {result.storage_class},'
          f' object type: {result.object_type},'
          f' version id: {result.version_id},'
          f' tagging count: {result.tagging_count},'
          f' server side encryption: {result.server_side_encryption},'
          f' server side data encryption: {result.server_side_data_encryption},'
          f' next append position: {result.next_append_position},'
          f' expiration: {result.expiration},'
          f' restore: {result.restore},'
          f' process status: {result.process_status},'
          f' delete marker: {result.delete_marker},'
    )

    # オブジェクトのコンテンツを読み取ります。
    content = result.body.read()

    # コンテンツをローカルファイルに保存します。この例では、ローカルファイル名は test.txt です。
    with open('./test.txt', 'wb') as f:
        f.write(content)

    print(f'File saved to test.txt successfully!')

# スクリプトが直接実行されるときに main 関数を呼び出します。
if __name__ == "__main__":
    main()  # スクリプトのメイン関数でエントリポイントを指定します。
package main

import (
	"context"
	"flag"
	"io"
	"log"
	"os"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// グローバル変数を定義します。
var (
	region     string // バケットが配置されているリージョン。
	bucketName string // バケット名。
	objectName string // オブジェクト名。
)

// コマンドラインパラメーターを初期化するために使用される init 関数を指定します。
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
	flag.StringVar(&objectName, "object", "", "The name of the object.")
}

func main() {
	// コマンドラインパラメーターを解析します。
	flag.Parse()

	// バケット名が指定されているかどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// リージョンが指定されているかどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// オブジェクト名が指定されているかどうかを確認します。
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, object name required")
	}

	// 出力ファイルのパスを指定します。
	outputFile := "downloaded.file" // このパラメーターをファイルを保存したいパスに置き換えてください。

	// デフォルト設定をロードし、認証情報プロバイダーとリージョンを指定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// クエリリクエストを作成します。
	request := &oss.GetObjectRequest{
		Bucket:    oss.Ptr(bucketName),      // バケット名
		Key:       oss.Ptr(objectName),      // オブジェクト名
		VersionId: oss.Ptr("yourVersionId"), // オブジェクトのバージョン ID
	}

	// クエリ操作を実行し、結果を処理します。
	result, err := client.GetObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to get object %v", err)
	}
	defer result.Body.Close() // 関数が完了したときにレスポンスボディが閉じられることを確認します。

	// ファイル全体を読み取ります。
	data, err := io.ReadAll(result.Body)
	if err != nil {
		log.Fatalf("failed to read object %v", err)
	}

	// コンテンツをファイルに書き込みます。
	err = os.WriteFile(outputFile, data, 0644)
	if err != nil {
		log.Fatalf("failed to write to output file %v", err)
	}

	log.Printf("file downloaded successfully to %s", outputFile)
}
<?php

// 依存ライブラリをロードするために autoload ファイルをインクルードします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドライン引数の説明を指定します。
$optsdesc = [
    "region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // (オプション) 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定します。
    "bucket" => ['help' => 'The name of the bucket', 'required' => True], // (必須) バケット名を指定します。
    "key" => ['help' => 'The name of the object', 'required' => True], // (必須) オブジェクト名を指定します。
];

// 説明を getopt が要求する長いオプションのリストに変換します。
// 各パラメーターの末尾にコロン (:) を追加して、値が必要であることを示します。
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// コマンドライン引数を解析します。
$options = getopt("", $longopts);

// 必須パラメーターが設定されているかどうかを確認します。
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help']; // パラメーターのヘルプ情報を取得します。
        echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
        exit(1); // 必須パラメーターが設定されていない場合はプログラムを終了します。
    }
}

// 解析されたパラメーターから値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケット名。
$key = $options["key"]; // オブジェクト名。

// 環境変数からアクセス認証情報をロードします。
// EnvironmentVariableCredentialsProvider を使用して、環境変数から AccessKey ID と AccessKey Secret を取得します。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト設定を使用します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証情報プロバイダーを指定します。
$cfg->setRegion($region); // バケットが配置されているリージョンを指定します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // エンドポイントが指定されている場合は、エンドポイントを指定します。
}

// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);

// 指定されたオブジェクトのコンテンツを取得するための GetObjectRequest オブジェクトを作成します。
$request = new Oss\Models\GetObjectRequest(
                bucket: $bucket,
                key: $key,
                versionId:"yourVersionId",// オブジェクトのバージョン ID を指定します。
);

// オブジェクトをクエリします。
$result = $client->getObject($request);

// オブジェクトを保存するローカルパスを指定します。
$localFilePath = './test/file.txt'; // このパラメーターを実際のローカルファイルパスに置き換えてください。

// コンテンツをローカルファイルに書き込みます。
file_put_contents($localFilePath, $result->body->getContents());

// 結果を表示します。
// HTTP ステータスコード、リクエスト ID、およびオブジェクトのコンテンツを出力します。
printf(
    'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。たとえば、HTTP ステータスコード 200 はリクエストが成功したことを示します。
    'request id:' . $result-> requestId. PHP_EOL // リクエスト ID。リクエストのデバッグや追跡に使用されます。
);

ossutil を使用する

ossutil を使用してバージョン管理が有効なバケットからオブジェクトをダウンロードするには、「cp (オブジェクトのダウンロード)」をご参照ください。

REST API を使用する

REST API を直接呼び出すこともできます。詳細については、「GetObject」をご参照ください。

オブジェクトの削除

バージョン管理が有効なバケットでは、バージョン ID を指定するか、ライフサイクルルールを設定することで、オブジェクトを完全削除できます。バージョン ID を指定せずにオブジェクトを削除すると、オブジェクトには削除マーカーが付けられ、その履歴バージョンには影響しません。

重要
  • バージョン管理を有効にした後、バージョン ID を指定せずにオブジェクトを削除しても、デフォルトではその最新バージョンまたは非最新バージョンは削除されません。

  • 同じバケットで OSS-HDFS サービスとバージョン管理を有効にしないでください。これにより、サービスの不安定化につながる可能性があります。安定した運用を確保するため、できるだけ早くバージョン管理を一時停止し、削除マーカーをクリーンアップするためのライフサイクルルールを設定してください。

    OSS-HDFS とバージョン管理の両方が有効になっているバケットは、どのように扱いますか?.

  • Expiration:オブジェクトの最新バージョンに適用され、期限切れの最新バージョンを履歴バージョンとして保持します。

  • NoncurrentVersionExpiration:オブジェクトの非最新バージョンに適用されます。このアクションはこれらのバージョンを完全削除します。

ライフサイクルルールでバージョン管理を使用するには、「ライフサイクル設定要素」をご参照ください。

  • バージョン ID を指定しない場合、オブジェクトには削除マーカーが付けられます。履歴バージョンは影響を受けず、後で復元できます。

  • バージョン ID を指定すると、OSS は指定されたオブジェクトバージョンを完全削除します。

OSS コンソール

ストレージコストを最小限に抑えるため、不要になったオブジェクトの以前のバージョンは、できるだけ早く削除することを推奨します。

警告

非最新バージョンのオブジェクトは、完全削除されると復元できません。注意して進めてください。

  1. OSS コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、バケット をクリックします。[バケット] ページで、対象のバケットを見つけてクリックします。

  3. 左側のナビゲーションウィンドウで、オブジェクト管理 > オブジェクト を選択します。

  4. オブジェクト ページで、以前のバージョン の横にある 表示 をクリックします。

  5. 不要な非最新バージョンを見つけ、次のいずれかの操作を行います:

    • 削除マーカーを削除するには、操作 列の 完全に削除 をクリックします。

    • オブジェクトバージョンを削除するには、操作列のimage.pngアイコンにポインターを合わせ、完全に削除をクリックします。

    複数の非最新バージョンを選択し、ページ下部の 完全に削除 をクリックすることもできます。

  6. OK をクリックします。

    ライフサイクルルールを設定して、非最新バージョンを定期的に削除することもできます。詳細については、「ライフサイクルルールの概要」をご参照ください。

OSS SDK

以下のコードは、バージョン管理が有効なバケットから特定のバージョンを削除します。他の SDK については、「SDK の概要」をご参照ください。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;

public class Demo {
    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントを使用します。実際の環境に合わせてエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケット名を指定します。例:examplebucket。
        String bucketName = "examplebucket";
        // オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。
        String objectName = "exampledir/object";
        String versionId  = "CAEQMxiBgICAof2D0BYiIDJhMGE3N2M1YTI1NDQzOGY5NTkyNTI3MGYyMzJm****";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";

        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // オブジェクトの指定されたバージョンを削除します。
            ossClient.deleteVersion(bucketName, objectName , versionId);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}
const OSS = require("ali-oss");

const client = new OSS({
  // yourregion をバケットが配置されているリージョンに置き換えます。たとえば、バケットが中国 (杭州) リージョンにある場合、Region を oss-cn-hangzhou に設定します。
  region: 'yourregion',
  // 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // yourbucketname をバケット名に置き換えます。
  bucket: 'yourbucketname'
});

// オブジェクトの versionId を指定します。
const versionId = "versionId";
// オブジェクトを指定します。
const objectName = "exampleobject.txt";
async function deleteVersionObject() {
  const result = await client.delete(objectName, {
    versionId,
  });
  console.log(result);
}

deleteVersionObject();
using Aliyun.OSS;
using Aliyun.OSS.Common;

// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを 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";
// オブジェクトまたは削除マーカーのバージョン ID を指定します。
var versionid = "yourObjectVersionidOrDelMarkerVersionid";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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
{
    // 削除したいオブジェクトまたは削除マーカーのバージョン ID を指定します。
    var request = new DeleteObjectRequest(bucketName, objectName)
    {
        VersionId = versionid
    };
    client.DeleteObject(request);
    Console.WriteLine("Delete object succeeded");
}
catch (Exception ex)
{
    Console.WriteLine("Delete object failed. {0}", ex.Message);
}
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* OSS アカウント情報を初期化します。*/
            
    /* yourEndpoint をバケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
    std::string Endpoint = "yourEndpoint";
    /* yourRegion をバケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。*/
    std::string Region = "yourRegion";
    /* バケット名を指定します。例:examplebucket。*/
    std::string BucketName = "examplebucket";
    /* オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例:exampledir/exampleobject.txt。*/
    std::string ObjectName = "exampledir/exampleobject.txt";

    /* ネットワークリソースを初期化します。*/
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* 指定された versionId を持つオブジェクト、または指定された versionId を持つ削除マーカーに関連付けられたオブジェクトを削除します。*/
    auto outcome = client.DeleteObject(DeleteObjectRequest(BucketName, ObjectName, "yourObjectVersionIdOrDeleteMarkerVersionId"));
    /* オブジェクトの versionId が指定されている場合、返される delete_marker は None で、返される versionId は指定されたオブジェクトの versionId です。*/
    /* 削除マーカーの versionId が指定されている場合、返される delete_marker は True で、返される versionId は指定された削除マーカーの versionId です。*/
    if (!outcome.isSuccess()) {
        /* 例外を処理します。*/
        std::cout << "DeleteObject fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* ネットワークリソースを解放します。*/
    ShutdownSdk();
    return 0;
}
package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// グローバル変数を定義します。
var (
	region     string // バケットが配置されているリージョン。
	bucketName string // バケット名。
	objectName string // オブジェクト名。
)

// init はコマンドラインフラグを初期化するために使用されます。
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
	flag.StringVar(&objectName, "object", "", "The name of the object.")
}

func main() {
	// コマンドラインフラグを解析します。
	flag.Parse()

	// バケット名が指定されているか確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// リージョンが指定されているか確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// オブジェクト名が指定されているか確認します。
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, object name required")
	}

	// デフォルト設定をロードし、認証情報プロバイダーとリージョンを設定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// オブジェクトを削除するリクエストを作成します。
	request := &oss.DeleteObjectRequest{
		Bucket:    oss.Ptr(bucketName),      // バケット名。
		Key:       oss.Ptr(objectName),      // オブジェクト名。
		VersionId: oss.Ptr("yourVersionId"), // オブジェクトの実際の versionId に置き換えてください。
	}

	// 削除操作を実行し、結果を処理します。
	result, err := client.DeleteObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to delete object %v", err)
	}

	// 結果を出力します。
	log.Printf("delete object result:%#v\n", result)
}
<?php

// 依存ライブラリが正しくロードされるように、autoloader ファイルをインポートします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドライン引数の説明を定義します。
$optsdesc = [
    "region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // バケットが配置されているリージョン。このパラメーターは必須です。
    "endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // エンドポイント。このパラメーターはオプションです。
    "bucket" => ['help' => 'The name of the bucket', 'required' => True], // バケット名。このパラメーターは必須です。
    "key" => ['help' => 'The name of the object', 'required' => True], // オブジェクト名。このパラメーターは必須です。
];

// 引数の説明を getopt が要求する長いオプション形式に変換します。
// 各引数の後にコロン (:) を追加して、引数に値が必要であることを示します。
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// コマンドライン引数を解析します。
$options = getopt("", $longopts);

// すべての必須引数が指定されていることを確認します。
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help']; // 引数のヘルプ情報を取得します。
        echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
        exit(1); // 必須引数が欠落している場合は、プログラムを終了します。
    }
}

// 解析された引数から値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケット名。
$key = $options["key"];       // オブジェクト名。

// 環境変数から認証情報をロードします。
// EnvironmentVariableCredentialsProvider を使用して、環境変数から Access Key ID と Access Key Secret を読み取ります。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト設定を使用します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証情報プロバイダーを設定します。
$cfg->setRegion($region); // バケットが配置されているリージョンを設定します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // エンドポイントが指定されている場合は、エンドポイントを設定します。
}

// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);

// 指定されたオブジェクトを削除するための DeleteObjectRequest オブジェクトを作成します。
$request = new Oss\Models\DeleteObjectRequest(
            bucket: $bucket,
            key: $key,
            versionId:"yourversionid", // 削除するオブジェクトのバージョン番号を指定します。
);

// オブジェクト削除操作を実行します。
$result = $client->deleteObject($request);

// 削除結果を出力します。
// HTTP ステータスコードとリクエスト ID を出力して、削除が成功したかどうかを確認します。
printf(
    'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。たとえば、204 は削除が成功したことを示します。
    'request id:' . $result->requestId . PHP_EOL     // リクエスト ID。リクエストのデバッグや追跡に使用されます。
);

ossutil

ossutil を使用してバージョン管理が有効なバケットからオブジェクトを削除するには、「rm (削除)」をご参照ください。

REST API

REST API を直接呼び出すこともできます。詳細については、「DeleteObject」をご参照ください。

オブジェクトの復元

バージョン管理が有効な場合、OSS はオブジェクトのすべてのバージョンを保持します。以前のバージョンを復元して、それを最新バージョンにすることができます。

以前のバージョンを復元するには、2 つの方法があります:

  • オブジェクトの以前のバージョンをコピーする

    指定された履歴バージョンを同じバケットにコピーします。コピーされたオブジェクトは最新バージョンになり、既存のすべての履歴バージョンは保持されます。

  • オブジェクトの最新バージョンを完全削除する

    バージョン ID を指定して最新バージョンを完全削除します。次の履歴バージョンが最新バージョンになります。

重要

完全削除されたバージョンは回復できません。以前のバージョンをコピーして復元することを推奨します。

OSS コンソールを使用する

  1. OSS コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、バケット をクリックします。[バケット] ページで、対象のバケットを見つけてクリックします。

  3. 左側のナビゲーションウィンドウで、オブジェクト管理 > オブジェクト を選択します。

  4. オブジェクト ページで、以前のバージョン の右側にある 表示 をクリックします。

  5. オブジェクトの以前のバージョンを復元します。

    重要

    一度に復元できるオブジェクトバージョンは 1 つだけです。削除マーカーは復元できません。

    • 単一のオブジェクトを復元するには

      対象バージョンの 操作 列で、回復 をクリックします。

    • 複数のオブジェクトを復元するには

      対象の以前のバージョンを選択し、ページ下部の 回復 をクリックし、表示されるダイアログボックスで OK をクリックします。

OSS SDK を使用する

以下のコードは、バージョン管理が有効なバケット内の特定のバージョンをコピーします。他の SDK については、「SDK の概要」をご参照ください。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;

public class Demo {
    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントを使用します。実際の環境に合わせてエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // ソースバケットの名前を指定します。
        String sourceBucketName = "srcexamplebucket";
        // ソースオブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。
        String sourceObjectName = "srcexampleobject.txt";
        // 送信先バケットの名前を指定します。送信先バケットはソースバケットと同じリージョンにある必要があります。
        String destinationBucketName = "desexamplebucket";
        // 送信先オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。
        String destinationObjectName = "desexampleobject.txt";
        String versionId  = "CAEQMxiBgICAof2D0BYiIDJhMGE3N2M1YTI1NDQzOGY5NTkyNTI3MGYyMzJm****";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";

        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            CopyObjectRequest copyObjectRequest = new CopyObjectRequest(sourceBucketName, sourceObjectName, destinationBucketName, destinationObjectName);
            copyObjectRequest.setSourceVersionId(versionId);
            CopyObjectResult copyObjectResult = ossClient.copyObject(copyObjectRequest);
            System.out.println("ETag: " + copyObjectResult.getETag() + " LastModified: " + copyObjectResult.getLastModified());
            System.out.println("dest object versionid: " + copyObjectResult.getVersionId());
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}
const OSS = require('ali-oss');

const client = new OSS({
  // yourregion をバケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを oss-cn-hangzhou に設定します。
  region: 'yourregion',
  // 環境変数からアクセス認証情報を取得します。このコードサンプルを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // yourbucketname をバケットの名前に設定します。
  bucket: 'yourbucketname'
});

// ソースオブジェクトの versionId を指定します。
const versionId = 'versionId';
// ソースオブジェクトを指定します。
const srcObject = 'srcObject.txt';
// ソースバケットを指定します。
const srcBucket = 'srcBucket';
// 送信先オブジェクトを指定します。
const targetObject = 'targetObject.txt';
async function Copy() {
  try {
    const result = await client.copy(targetObject, srcObject, srcBucket, {
      meta: {
        versionId: versionId
      }
    });

    console.log(result);
  } catch (error) {
    console.error(error);
  }
}

Copy()
using Aliyun.OSS;
using Aliyun.OSS.Common;
// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを 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 sourceBucket = "yourSourceBucketName";
// ソースオブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。
var sourceObject = "yourSourceObjectName";
// 送信先バケットの名前を指定します。送信先バケットはソースバケットと同じリージョンにある必要があります。
var targetBucket = "yourDestBucketName";
// 送信先オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。
var targetObject = "yourDestObjectName";
// ソースオブジェクトのバージョン ID を指定します。
var versionid = "yourArchiveObjectVersionid";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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
{
    var metadata = new ObjectMetadata();
    metadata.AddHeader("mk1", "mv1");
    metadata.AddHeader("mk2", "mv2");
    var req = new CopyObjectRequest(sourceBucket, sourceObject, targetBucket, targetObject)
    {
        // NewObjectMetadata の値が null の場合、COPY モードが使用され、ソースオブジェクトのメタデータが送信先オブジェクトにコピーされます。NewObjectMetadata の値が null でない場合、REPLACE モードが使用され、ソースオブジェクトのメタデータが送信先オブジェクトのメタデータを上書きします。
        NewObjectMetadata = metadata, 
        // オブジェクトのバージョン ID を指定します。
        SourceVersionId = versionid
    };
    // オブジェクトをコピーします。
    var result = client.CopyObject(req);
    Console.WriteLine("Copy object succeeded, vesionid:{0}", result.VersionId);
}
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);
}
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* OSS アカウント情報を初期化します。*/
            
    /* Endpoint をバケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、Endpoint を https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
    std::string Endpoint = "yourEndpoint";
    /* Region をバケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、Region を cn-hangzhou に設定します。*/
    std::string Region = "yourRegion";
    /* ソースバケットの名前を指定します。例:srcexamplebucket。*/
    std::string SourceBucketName = "srcexamplebucket";
    /* 送信先バケットの名前を指定します。ソースバケットと同じリージョンにある必要があります。例:destbucket。*/
    std::string CopyBucketName = "destbucket";
    /* ソースオブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例:srcdir/scrobject.txt。*/
    std::string SourceObjectName = "srcdir/scrobject.txt";
    /* 送信先オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例:destdir/destobject.txt。*/
    std::string CopyObjectName = "destdir/destobject.txt";


    /* ネットワークリソースを初期化します。*/
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    CopyObjectRequest request(CopyBucketName, CopyObjectName);
    request.setCopySource(SourceBucketName, SourceObjectName);
    /* ソースオブジェクトのバージョン ID を指定します。*/
    request.setVersionId("yourSourceObjectVersionId");

    /* オブジェクトの指定されたバージョンをコピーします。*/
    auto outcome = client.CopyObject(request);

    if (outcome.isSuccess()) {
        std::cout << "versionid:" << outcome.result().VersionId() << std::endl;
    }
    else {
        /* 例外を処理します。*/
        std::cout << "CopyObject fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* ネットワークリソースを解放します。*/
    ShutdownSdk();
    return 0;
}
package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// グローバル変数を定義します。
var (
	region         string // オブジェクトが保存されているリージョン。
	srcBucketName  string // ソースバケット名。
	srcObjectName  string // ソースオブジェクト名。
	destBucketName string // 送信先バケット名。
	destObjectName string // 送信先オブジェクト名。
)

// コマンドラインパラメーターを初期化するために使用される init 関数を指定します。
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&srcBucketName, "src-bucket", "", "The name of the source bucket.")
	flag.StringVar(&srcObjectName, "src-object", "", "The name of the source object.")
	flag.StringVar(&destBucketName, "dest-bucket", "", "The name of the destination bucket.")
	flag.StringVar(&destObjectName, "dest-object", "", "The name of the destination object.")
}

func main() {
	// コマンドラインパラメーターを解析します。
	flag.Parse()

	// ソースバケット名が指定されているかどうかを確認します。
	if len(srcBucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, source bucket name required")
	}

	// リージョンが指定されているかどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// 送信先バケット名が指定されていない場合、ソースバケット名が使用されます。
	if len(destBucketName) == 0 {
		destBucketName = srcBucketName
	}

	// ソースオブジェクト名が指定されているかどうかを確認します。
	if len(srcObjectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, source object name required")
	}

	// 送信先オブジェクト名が指定されているかどうかを確認します。
	if len(destObjectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, destination object name required")
	}

	// デフォルト設定をロードし、認証情報プロバイダーとリージョンを指定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// コピーリクエストを作成します。
	copyRequest := &oss.CopyObjectRequest{
		Bucket:           oss.Ptr(destBucketName),            // 送信先バケット名。
		Key:              oss.Ptr(destObjectName),            // 送信先オブジェクト名。
		SourceKey:        oss.Ptr(srcObjectName),             // ソースオブジェクト名。
		SourceBucket:     oss.Ptr(srcBucketName),             // ソースバケット名。
		SourceVersionId:  oss.Ptr("yourVersionId"),           // ソースオブジェクトの実際のバージョン ID を指定します。
		StorageClass:     oss.StorageClassStandard,           // ストレージクラスを標準に設定します。
		TaggingDirective: oss.Ptr("Replace"),                 // ソースオブジェクトのタグはコピーされません。
		Tagging:          oss.Ptr("tag1=value1&tag2=value2"), // 送信先オブジェクトの実際のタグを指定します。
	}

	// 操作を実行し、結果を処理します。
	copyResult, err := client.CopyObject(context.TODO(), copyRequest)
	if err != nil {
		log.Fatalf("failed to copy object: %v", err)
	}

	// 結果を表示します。
	log.Printf("copy object result versionId:%#v\n", *copyResult.VersionId)

}
<?php

// 依存関係をロードするために autoload ファイルをインクルードします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドラインパラメーターの説明を指定します。
$optsdesc = [
    "region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // (オプション) 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定します。
    "bucket" => ['help' => 'The name of the bucket', 'required' => True], // (必須) 送信先バケットの名前を指定します。
    "key" => ['help' => 'The name of the object', 'required' => True], // (必須) 送信先オブジェクトの名前を指定します。
    "src-bucket" => ['help' => 'The name of the source bucket', 'required' => False], // (オプション) ソースバケットの名前を指定します。
    "key" => ['help' => 'The name of the object', 'required' => True], // (必須) ソースオブジェクトの名前を指定します。
];

// パラメーターの説明を getopt が要求する長いオプションリストに変換します。
// 各パラメーターの末尾にコロン (:) を追加して、値が必要であることを示します。
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// コマンドラインパラメーターを解析します。
$options = getopt("", $longopts);

// 必須パラメーターが設定されているかどうかを確認します。
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help']; // パラメーターに関するヘルプ情報を取得します。
        echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
        exit(1); // 必須パラメーターが設定されていない場合は、プログラムを終了します。
    }
}

// 解析されたパラメーターから値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // 送信先バケットの名前。
$key = $options["key"]; // 送信先オブジェクトの名前。
$srcKey = $options["src-key"]; // ソースオブジェクトの名前。

// 環境変数からアクセス認証情報を取得します。
// EnvironmentVariableCredentialsProvider 環境変数から AccessKey ID と AccessKey Secret を取得します。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト設定を使用します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証情報プロバイダーを指定します。
$cfg->setRegion($region); // バケットが配置されているリージョンを指定します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // エンドポイントが指定されている場合は、エンドポイントを指定します。
}

// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);

// ソースオブジェクトをコピーするための CopyObjectRequest オブジェクトを作成します。
$request = new Oss\Models\CopyObjectRequest(
            bucket: $bucket,
            key: $key,
            sourceVersionId: "yourVersionId",// ソースオブジェクトのバージョン ID を指定します。
);

if (!empty($options["src-bucket"])) {
    $request->sourceBucket = $options["src-bucket"]; // ソースバケット名が指定されている場合は、sourceBucket パラメーターを指定します。
}
$request->sourceKey = $srcKey; // ソースオブジェクトの名前を指定します。

// オブジェクトコピー操作を実行します。
$result = $client->copyObject($request);

// オブジェクトコピーの結果を表示します。
printf(
    'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。たとえば、HTTP ステータスコード 200 はリクエストが成功したことを示します。
    'request id:' . $result-> requestId. PHP_EOL // リクエスト ID。リクエストのデバッグや追跡に使用されます。
);
import argparse
import alibabacloud_oss_v2 as oss

# コマンドライン引数パーサーを作成し、スクリプトの目的を記述します:バケット内のオブジェクトをコピーする。
parser = argparse.ArgumentParser(description="copy object sample")

# 必須のリージョン、送信先バケット名、ソースバケット名、送信先オブジェクト名、ソースオブジェクト名、ソースオブジェクトのバージョン ID、およびオプションのエンドポイントを含むコマンドライン引数を定義します。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the destination bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
parser.add_argument('--key', help='The name of the destination object.', required=True)
parser.add_argument('--source_key', help='The name of the source object.', required=True)
parser.add_argument('--source_bucket', help='The name of the source bucket.', required=True)
parser.add_argument('--source_version_id', help='The version ID of the source object.',required=True)

def main():
    # コマンドライン引数を解析して、ユーザーが入力した値を取得します。
    args = parser.parse_args()

    # ID 検証のために環境変数からアクセス認証情報をロードします。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # デフォルトの SDK 設定を使用して設定オブジェクトを作成し、認証プロバイダーを設定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # コマンドライン引数に基づいて設定オブジェクトのリージョンプロパティを設定します。
    cfg.region = args.region

    # カスタムエンドポイントが指定されている場合は、設定オブジェクトのエンドポイントプロパティを更新します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 上記の設定を使用して OSS クライアントを初期化し、OSS との対話の準備をします。
    client = oss.Client(cfg)

    # 指定されたオブジェクトをコピーするリクエストを送信します。
    result = client.copy_object(oss.CopyObjectRequest(
        bucket=args.bucket,  # 送信先バケット名。
        key=args.key,  # 送信先オブジェクト名。
        source_key=args.source_key,  # ソースオブジェクト名。
        source_bucket=args.source_bucket,  # ソースバケット名。
        source_version_id=args.source_version_id,  # ソースオブジェクトのバージョン ID。
    ))

    # 操作結果に関する情報を出力して、リクエストのステータスを確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' version id: {result.version_id},'
          f' hash crc64: {result.hash_crc64},'
          f' source version id: {result.source_version_id},'
          f' server side encryption: {result.server_side_encryption},'
          f' server side data encryption: {result.server_side_data_encryption},'
          f' last modified: {result.last_modified},'
          f' etag: {result.etag},'
          )

# このスクリプトが直接実行される場合、main 関数を呼び出して処理ロジックを開始します。
if __name__ == "__main__":
    main()  # スクリプトのエントリポイント。プログラムフローはここから始まります。

ossutil を使用する

ossutil を使用して以前のバージョンを復元するには、「revert (バージョンの復元)」をご参照ください。

RESTful API を使用する

REST API を直接呼び出すこともできます。詳細については、「CopyObject」をご参照ください。