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

Object Storage Service:バージョン管理が有効なバケット内のオブジェクトを管理する

最終更新日:Feb 23, 2024

バケットのバージョン管理が有効になっている場合、Object Storage Service (OSS) は、バケット内のすべてのオブジェクトのバージョンごとに一意のIDを生成します。 バケット内の既存のオブジェクトのコンテンツとアクセス制御リスト (ACL) は変更されません。 バージョン管理により、データが誤って上書きまたは削除されるのを防ぎ、以前のバージョンのオブジェクトを照会または復元できます。

使用上の注意

バージョン管理が有効なバケットにオブジェクトをアップロード、一覧表示、ダウンロード、削除、および復元するときに、次の項目に注意してください。

  • 現在のバージョンと以前のバージョンは、バケット内のオブジェクトごとに保存されます。

  • バージョン管理が有効になる前にアップロードされたオブジェクトのバージョンIDはnullに設定されます。

  • 見やすくするために、以下の図のすべてのバージョンIDは単純な形式です。

バージョン管理の詳細については、「概要」をご参照ください。

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

バージョン管理が有効なバケットにオブジェクトをアップロードすると、そのオブジェクトに対して一意のバージョンIDが生成されます。

説明

OSSは、PutObject、PostObject、CopyObject、MultipartUploadなどの操作を呼び出すと、バージョン管理が有効なバケットにアップロードされたオブジェクトに対して一意のバージョンIDを生成します。

次の図に例を示します。 この例では、PutObject操作を呼び出して、キーがexample.jpgであるオブジェクトをバージョン管理が有効なバケットにアップロードします。 OSSは、オブジェクトの一意のバージョンID 111111を生成します。

PutObject操作を呼び出して、既存のexample.jpgオブジェクトと同じキーを持つオブジェクトをアップロードすると、OSSはオブジェクトに固有のバージョンID 222222を持つ新しいバージョンを生成し、新しいバージョンをオブジェクトの現在のバージョンとして保存します。 バージョン111111は、前のバージョンとして格納される。 PutObject操作を呼び出して同じキーを持つオブジェクトを再度アップロードすると、OSSはオブジェクトに固有のバージョンID 333333を持つ新しいバージョンを生成し、新しいバージョンをオブジェクトの現在のバージョンとして保存します。 次の図に示すように、バージョン111111と222222は以前のバージョンとして保存されます。

OSS コンソールの使用

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

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

  3. 左側のナビゲーションツリーで、ファイル > オブジェクト を選択します。

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

  5. アップロード ページで、パラメーターを設定します。

    1. 基本設定を構成します。 下表に、各パラメーターを説明します。

      パラメーター

      説明

      アップロード先

      オブジェクトがバケットにアップロードされた後にオブジェクトが格納されるディレクトリを指定します。

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

      • ディレクトリを指定する: オブジェクトは指定されたディレクトリにアップロードされます。 ディレクトリの名前を入力します。 バケットに存在しないディレクトリ名を入力すると、自動的にディレクトリが作成され、オブジェクトがディレクトリにアップロードされます。

        ディレクトリ名は次の規則を満たす必要があります。

        • 名前は1 ~ 254文字で、UTF-8でエンコードされた文字を含めることができます。

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

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

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

      オブジェクトACL

      オブジェクトのACLを指定します。

      • バケットから継承: オブジェクトのACLはバケットのACLと同じです。

      • 非公開: オブジェクトの所有者と許可されたユーザーのみが、オブジェクトの読み取りと書き込みができます。 他のユーザーはオブジェクトにアクセスできません。

      • 公開読み取り: オブジェクトの所有者または承認されたユーザーのみが、オブジェクトの読み取りと書き込みを行うことができます。 匿名ユーザーを含む他のユーザーは、オブジェクトのみを読み取ることができます。 File ACLパラメーターをこの値に設定すると、すべてのユーザーがオブジェクトを読み取ることができます。 これにより、データリークや予期しない料金が発生する可能性があります。 作業は慎重に行ってください。

      • 公開読み書き: 匿名ユーザーを含むすべてのユーザーが、アップロードするオブジェクトを読み書きできます。 これにより、データリークや予期しない料金が発生する可能性があります。 ユーザーが禁止されているデータや情報をオブジェクトに書き込むと、正当な利益や権利が侵害される可能性があります。 必要な場合を除き、Object ACLパラメーターをPublic Read/Writeに設定しないことを推奨します。

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

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

      アップロードするファイルまたはディレクトリ。

      ファイルの選択 をクリックしてローカルファイルを選択するか、フォルダーの選択 をクリックしてディレクトリを選択します。 アップロードするローカルファイルまたはディレクトリを [アップロードするファイル] セクションにドラッグすることもできます。

      選択したディレクトリにアップロードしないローカルファイルが含まれている場合は、[アップロードするファイル] セクションのファイルリストでローカルファイルを見つけ、[操作] 列の [削除] をクリックしてファイルを削除します。

      重要
      • OSS内の既存のオブジェクトと同じ名前のローカルファイルをバージョン化されていないバケットにアップロードすると、アップロードされたオブジェクトは既存のオブジェクトを上書きします。

      • OSSの既存のオブジェクトと同じ名前のローカルファイルをバージョン管理が有効なバケットにアップロードすると、既存のオブジェクトは以前のバージョンになり、アップロードされたオブジェクトは現在のバージョンになります。

    2. オプション: [詳細設定] の右側にあるimage.pngアイコンをクリックして、ストレージクラスや暗号化方式のパラメーターなどの詳細設定を行います。 下表に、各パラメーターを説明します。

      パラメーター

      説明

      ストレージクラス

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

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

      • スタンダード: 信頼性が高く、可用性が高く、パフォーマンスの高いストレージサービスを提供し、頻繁なデータアクセスを処理できます。 標準は、ソーシャルネットワーキングアプリケーション、画像、音声、およびビデオリソース共有アプリケーション、大規模Webサイト、およびビッグデータ分析など、さまざまなビジネスアプリケーションに適しています。

      • IA: 標準よりも低価格で耐久性の高いストレージサービスを提供します。 IAの最小課金サイズは64 KB、最小課金保存期間は30日です。 IAオブジェクトにリアルタイムでアクセスできます。 IAオブジェクトにアクセスすると、データ取得料金が発生します。 IAは、月に1回または2回アクセスされるデータなど、アクセス頻度の低いデータに適しています。

      • アーカイブ: IAよりも低価格で耐久性の高いストレージサービスを提供します。 アーカイブの最小課金サイズは64 KB、最小課金ストレージ期間は60日です。 アーカイブオブジェクトが復元された後、またはアーカイブオブジェクトのリアルタイムアクセスが有効になった後、アーカイブオブジェクトにアクセスできます。 アーカイブオブジェクトの復元に必要な時間は約1分です。 アーカイブオブジェクトを復元すると、データ取得料金が発生します。 アーカイブオブジェクトのリアルタイムアクセスを有効にした後にアーカイブオブジェクトにアクセスすると、アーカイブオブジェクトのサイズに基づいてアーカイブデータ取得料金が発生します。 アーカイブは、アーカイブデータ、医用画像、科学資料、ビデオ映像など、長期間保存する必要のあるデータに適しています。

      • コールドアーカイブ: アーカイブよりも低価格で耐久性の高いストレージサービスを提供します。 コールドアーカイブの最小課金サイズは64 KB、最小課金ストレージ期間は180日です。 オブジェクトにアクセスする前に、Cold Archiveオブジェクトを復元する必要があります。 Cold Archiveオブジェクトの復元に必要な時間は、オブジェクトのサイズと復元モードによって異なります。 Cold Archiveオブジェクトを復元すると、データ取得料金とAPI操作呼び出し料金が発生します。 コールドアーカイブは、コンプライアンス要件のために長期間保持する必要があるデータ、ビッグデータおよびAI分野で長期間にわたって蓄積された生データ、映画およびテレビ業界で保持されているメディアリソース、オンライン教育業界からのアーカイブされたビデオなど、長期間にわたるコールドデータの保存に適しています。

      • Deep Cold Archive: コールドアーカイブよりも低価格で耐久性の高いストレージサービスを提供します。 Deep Cold Archiveの最小課金サイズは64 KB、最小課金ストレージ期間は180日です。 アクセスする前に、Deep Cold Archiveオブジェクトを復元する必要があります。 Deep Cold Archiveオブジェクトの復元に必要な時間は、オブジェクトのサイズと復元モードによって異なります。 Deep Cold Archiveオブジェクトを復元すると、データ取得料金とAPI操作呼び出し料金が発生します。 Deep Cold Archiveは、ビッグデータやAI分野で長期間蓄積される生データ、長期保存が必要なメディアデータ、規制やポリシーの遵守要件により長期間保存する必要があるデータ、テープによる保存が必要なデータなど、非常にコールドなデータを長期間保存するのに適しています。

      ストレージクラスの詳細については、「概要」をご参照ください。

      暗号化の方法

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

      • バケットから継承 (デフォルト): オブジェクトの暗号化方法はバケットの暗号化方法と同じです。

      • OSS管理: OSSによって管理されるキーは、バケット内のオブジェクトを暗号化するために使用されます。 OSSはキーを使用してオブジェクトを暗号化します。 OSSはまた、定期的に回転するマスターキーを使用して暗号化キーを暗号化します。

      • KMS: key Management Service (KMS) に保存されているデフォルトの顧客マスターキー (CMK) 、または指定されたCMKを使用して、データの暗号化と復号化が行われます。

        KMSを使用してデータを暗号化する前に、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は、暗号化オブジェクトのメタデータに記録される。 オブジェクトは、解読権限を持つユーザーによってダウンロードされると解読されます。 <cmkname> は、CMKの作成時に設定したCMKのオプションの名前です。

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

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

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

      オブジェクトに追加するメタデータを指定します。 オブジェクトに複数のユーザーメタデータヘッダーを追加できます。 ただし、ユーザーメタデータの合計サイズは8 KBを超えることはできません。 ユーザーメタデータを追加する場合、ユーザーメタデータヘッダーにx-oss-meta- プレフィックスを含める必要があり、値を指定する必要があります。 例: x-oss-meta-location:hangzhou

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

      オブジェクトのアップロードの進行状況は、タスクのアップロード パネルの [タスクのアップロード] タブで確認できます。

OSS SDKの使用

次のサンプルコードは、一般的なプログラミング言語のOSS SDKを使用して、バージョン管理が有効なバケットにオブジェクトをアップロードするための単純なアップロードを実行する方法の例を示しています。 他のプログラミング言語のOSS SDKを使用して、バージョン管理が有効なバケットにオブジェクトをアップロードする簡単なアップロードを実行する方法の詳細については、「概要」をご参照ください。

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;
java.io.ByteArrayInputStreamをインポートします。public classデモ {
    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";

        // Create an OSSClient instance. 
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            // この例では、文字列はオブジェクトとしてアップロードされます。 
            String content = "Hello OSS";
            PutObjectResult result = ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));
            // オブジェクトのバージョンIDを表示します。 
            System.out.println("result.versionid: " + result.getVersionId());
        } catch (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
} 
<?php
if (is_file(__DIR__) 。 '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__) 。 '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

OSS\OssClientを使用します。OSS\Core\OssExceptionを使用します。// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
$end point = "https://oss-cn-hangzhou.aliyuncs.com";
$bucket= "<yourBucketName>";
// オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: Example /test.txt。 
$object = "<yourObjectName>";
$content = "hello world";

$ossClient = new OssClient($accessKeyId, $accessKeySecret, $end point);

try {
    // バージョン管理が有効なバケットにオブジェクトをアップロードします。 
    $ret = $ossClient->putObject($bucket, $object, $content);

    // オブジェクトのバージョンIDを表示します。 
    print("versionId:" .$ret[OssClient::OSS_HEADER_VERSION_ID]]);
} catch (OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage()) 。 "\n");
    戻ります。}

print(__FUNCTION__) 。 ": OK" 。 "\n"); 
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、
  // バケットの名前を指定します。 
  bucket: 'yourbucketname'
});

async関数put() {
  const result = await client.put('fileName', path.normalize('D :\\ localpath\\examplefile.txt '));
  console.log(result.res.headers['x-oss-version-id']); // アップロードされたオブジェクトのバージョンIDを表示します。 
}
put();
# -*- coding: utf-8 -*-
oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート
# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
# バケットの名前を指定します。 
bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'yourBucketName')

# オブジェクトをアップロードします。 
result = bucket.put_object('yourObjectName', 'content of object')
# 返されたHTTPステータスコードを表示します。 
print('httpレスポンスコード: {0}'.format(result.status))
# アップロードされたオブジェクトのバージョンIDを表示します。 
System.Textを使用した;
Aliyun.OSSを使用します。// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
var endpoint = "yourEndpoint";
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケットの名前を指定します。 例: examplebucket. 
var bucketName = "examplebucket";
// オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。 
var objectName = "exampleobject.txt";
var objectContent = "単なるクラウドではありません。";
// OSSClientインスタンスを作成します。 
var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret);
トライ
{
    byte[] binaryData = Encoding.ASCII.GetBytes(objectContent);
    MemoryStream requestContent = new MemoryStream(binaryData);
    // ローカルファイルをアップロードします。 
    var result = client.PutObject(bucketName, objectName, requestContent);
    Console.WriteLine("Put object successed versionid : {0}", result.VersionId);
}
キャッチ (例外ex)
{
    Console.WriteLine("Put object failed, {0}", ex.Message);
} 
のprint('put object version:', result.versionid)
パッケージメイン

import (import (import)
  "fmt"
  "net/http"
  "os"
  "strings"

  「github.com/aliyun/aliyun-oss-go-sdk/oss」
)

func main() {
    // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // Create an OSSClient instance. 
    // バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。 
    client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
    if err! =nil {
       fmt.Println("Error:", err)
       os.Exit(-1)
  }

  // バケットの名前を指定します。 
  bucket, err := client.Bucket("yourBucketName")
  if err! =nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
  }

  var retHeader http.Header
  // 文字列をアップロードします。 oss.GetResponseHeaderを使用して、返されたヘッダーを取得します。 
  // オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 
  err = bucket.PutObject("yourObjectName", strings.NewReader("yourObjectValue"), oss.GetResponseHeader(&retHeader))
  if err! =nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
  }
  // x-oss-version-idヘッダーの値を表示します。 
  fmt.Println("x-oss-version-id:", oss.GetVersionId(retHeader))
} 
#include <alibabacloud/oss/OssClient.h>
名前空間listaCloud::OSSを使用します。int main(void)
{
    /* OSSへのアクセスに使用されるアカウントに関する情報を初期化します。 */
            
    /* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
    std::string Endpoint = "yourEndpoint";
    /* バケットの名前を指定します。 例: examplebucket. */
    std::string BucketName = "examplebucket";
    /* オブジェクトのフルパスを指定します。 オブジェクトのフルパスにバケット名を含めないでください。 例: exampledir/exampleobject.txt。 */
    std::string ObjectName = "exampledir/exampleobject.txt";

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

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

    /* オブジェクトをアップロードします。 */
    auto outcome = client.PutObject (リクエスト);

    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();
    0を返します。} 

ossutil の使用

ossutilを使用して単純なアップロードを実行し、バージョン管理が有効なバケットにオブジェクトをアップロードする方法の詳細については、「オブジェクトのアップロード」をご参照ください。

RESTful API の使用

プログラムにカスタムオプションが必要な場合は、RESTful API操作を呼び出すことができます。 API操作を直接呼び出すには、コードに署名計算を含める必要があります。 詳細は、「PutObject」をご参照ください。

オブジェクトの一覧表示

GetBucketVersions (ListObjectVersions) 操作を呼び出して、削除マーカーを含む、バージョン管理が有効なバケット内のすべてのオブジェクトバージョンに関する情報を照会できます。

  • GetBucketVersions (ListObjectVersions) 操作と比較して、GetBucket (ListObject) 操作は、バケット内の削除マーカーではない現在のオブジェクトバージョンのみを返します。

  • GetBucketVersions (ListObjectVersions) リクエストに対して、最大1,000のオブジェクトバージョンを返すことができます。 複数のGetBucketVersions (ListObjectVersions) リクエストを送信して、バージョン管理が有効なバケット内のすべてのオブジェクトバージョンを取得できます。

    たとえば、バケットには、キーがexample.jpgとphoto.jpgの2つのオブジェクトが含まれています。 example.jpg オブジェクトに 900 のバージョン、 photo.jpg オブジェクトに 500 のバージョンがあります。 GetBucketVersions (ListObjectVersions) リクエストを送信すると、example.jpgオブジェクトの900バージョンとphoto.jpgオブジェクトの100バージョンが返されます。 バージョンは、最初にオブジェクトキーのアルファベット順に返され、次にバージョンが生成された時間順に返されます。

次の図に示すように、GetBucketVersions (ListObjectVersions) 操作が呼び出されると、削除マーカーを含むすべてのオブジェクトバージョンが返されます。 GetBucket (ListObject) 操作が呼び出されると、削除マーカーではない現在のオブジェクトバージョンのみが返されます。 したがって、バージョンIDが444444のphoto.jpgオブジェクトの現在のバージョンのみが返されます。

OSS コンソールの使用

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

  2. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、一覧表示するオブジェクトが保存されているバケットの名前をクリックします。

    現在のページには、バケット内のすべてのオブジェクトの現在のバージョン (削除マーカーを除く) がページごとに表示されます。 削除マーカーを含むバケット内のすべてのオブジェクトのすべてのバージョンを表示するには、オブジェクト ページの 以前のバージョン の右側にある 表示 をクリックします。

OSS SDKの使用

次のサンプルコードは、一般的なプログラミング言語のOSS SDKを使用して、バージョン管理が有効なバケット内のオブジェクトを一覧表示する方法の例を示しています。 他のプログラミング言語のOSS SDKを使用してオブジェクトを一覧表示する方法の詳細については、「概要」をご参照ください。

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;

public classデモ {
    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";

        // Create an OSSClient instance. 
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            // バケット内の削除マーカーを含む、すべてのオブジェクトのバージョンを一覧表示します。 
            文字列nextKeyMarker = null;
            文字列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 (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
} 
<?php
if (is_file(__DIR__) 。 '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__) 。 '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

OSS\OssClientを使用します。OSS\Core\OssExceptionを使用します。// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
$end point = "yourEndpoint";
// バケットの名前を指定します。 例: examplebucket. 
$bucket= "examplebucket";

$ossClient = new OssClient($accessKeyId, $accessKeySecret, $end point, false);

try {
    $option=配列 (
        OssClient::OSS_KEY_MARKER => null、
        OssClient::OSS_VERSION_ID_MARKER => null
    );
    $bool = true;
    while ($bool){
        $result = $ossClient->listObjectVersions($bucket,$option);
        // リストされたオブジェクトのバージョンに関する情報を表示します。 
        foreach ($result->getObjectVersionList() as $key => $info){
            printf("key name: {$info->getKey()}\n");
            printf("versionid: {$info->getVersionId()}\n");
            printf("Is latest: {$info->getIsLatest()}\n\n");
        }

        // リストされた削除マーカーのバージョンを表示します。 
        foreach ($result->getDeleteMarkerList() as $key => $info){
            printf("del_makerキー名: {$info->getKey()}\n");
            printf("del_maker versionid: {$info->getVersionId()}\n");
            printf("del_maker Is latest: {$info->getIsLatest()}\n\n");
        }

        if($result->getIsTruncated() === 'true'){
            $option[OssClient::OSS_KEY_MARKER] = $result->getNextKeyMarker();
        $option[OssClient::OSS_VERSION_ID_MARKER] = $result->getNextVersionIdMarker();
        }else{
            $bool = false;
        }
    }
} catch(OssException $e) {
    printf($e->getMessage()) 。 "\n");
    戻ります。} 
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、
  // バケットの名前を指定します。 
  bucket: 'yourbucketname'
});

// 削除マーカーを含む、バケット内のすべてのオブジェクトのバージョンを一覧表示します。 
async関数getObjectVersions() {
  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.de leteMarker.forEach((o) => {
      console.log('${o.name}, ${o.versionId}');
    });

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

getObjectVersions();
# -*- coding: utf-8 -*-
oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート
# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
# バケットの名前を指定します。 
bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'yourBucketName')

# list_object_versions操作を呼び出して、バージョン管理が有効なバケット内のオブジェクトのバージョンを一覧表示します。 
# バケット内の削除マーカーを含む、すべてのオブジェクトのバージョンを一覧表示します。 
result = bucket.list_object_versions()

# バケット内のすべてのオブジェクトのバージョンを一覧表示します。 
next_key_marker=なし
next_versionid_marker=なし
真の間:
    result = bucket.list_object_versions(key_marker=next_key_marker, versionid_marker=next_versionid_marker)

    # リストされたオブジェクトのバージョンを表示します。 
    for version_info in result.versions:
        print('version_info.versionid:', version_info.versionid)
        print('version_info.key:', version_info.key)
        print('version_info.is_latest:', version_info.is_latest)

    # リストされた削除マーカーのバージョンを表示します。 
    for del_maker_Info in result.delete_marker:
        print('del_maker.key:', del_maker_Info.key)
        print('del_maker.versionid:', del_maker_Info.versionid)
        プリント ('del_maker.is_latest:', del_maker_Info.is_latest)

    is_truncated = result.is_truncated

    # バケット内のすべてのオブジェクトのすべてのバージョンが一覧表示されているかどうかを確認します。 すべてのオブジェクトのバージョンが完全にリストされていない場合、リスト操作が続行されます。 すべてのオブジェクトのバージョンが完全にリストされると、リスト操作は停止します。 
    is_truncatedの場合:
        next_key_marker = result.next_key_marker
        next_versionid_marker = result.next_versionid_marker
    else:
        ブレーク
パッケージメイン

import (import (import)
    "fmt"
    "os"
    「github.com/aliyun/aliyun-oss-go-sdk/oss」
)

func HandleError (エラーエラー) {
    fmt.Println("Error:", err)
    os.Exit(-1)
}

func main() {
    // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }
    // Create an OSSClient instance. 
    // バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。 
    client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // バケットの名前を指定します。 
    bucketName := "examplebucket"
    bucket,err := client.Bucket(bucketName)
    if err! =nil {
        HandleError(err)
    }

    // バケット内の削除マーカーを含むすべてのオブジェクトのバージョンを一覧表示します。 
    keyMarker := oss.KeyMarker("")
    // VersionIdMarkerパラメーターは、リスト操作の開始位置を指定するためにKeyMarkerパラメーターとともに設定されます。 
    versionIdMarker := oss.VersionIdMarker("")
    for {
        lor, err := bucket.ListObjectVersions(keyMarker,versionIdMarker)
        if err! =nil {
            HandleError(err)
        }

        // オブジェクトのバージョンIDを表示します。 
        for _, dirName := range lor.ObjectVersions {
            fmt.Println("Versionid:",dirName.VersionId)
            fmt.Println("Key:",dirName.Key)
            fmt.Println("Is Latest" 、dirName.IsLatest)
        }
        // リストされた削除マーカーのバージョンを表示します。 
         for _, marker := range lor.ObjectDeleteMarkers {
            fmt.Println(marker.VersionId)
            fmt.Println(marker.Key)
        }
        // 必要なバージョンがリストされているかどうかを確認します。 バージョンのリストが不完全な場合は、リスト操作が続行されます。 バージョンが完全にリストされると、リスト操作は停止します。 
        keyMarker = oss.KeyMarker(lor.NextKeyMarker)
        versionIdMarker = oss.VersionIdMarker(lor.NextVersionIdMarker)
        if! lor.IsTruncated {
            break
        }
    }
}

ossutil の使用

バージョン管理が有効なバケットでオブジェクトを一覧表示する方法の詳細については、「オブジェクトの一覧表示」をご参照ください。

RESTful API の使用

プログラムにカスタムオプションが必要な場合は、RESTful API操作を呼び出すことができます。 API操作を直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「ListObjectVersions (GetBucketVersions) 」をご参照ください。

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

バージョン管理が有効なバケットから、現在のバージョンまたは特定のバージョンのオブジェクトをダウンロードできます。

既定では、バージョンIDが指定されていないGetObjectリクエストがオブジェクトのダウンロードを開始すると、オブジェクトの現在のバージョンが返されます。 次の図では、バージョンIDが333333のオブジェクトの現在のバージョンが返されます。

バージョンIDが指定されていないGetRequestリクエストがオブジェクトのダウンロードを開始し、オブジェクトの現在のバージョンが削除マーカーである場合、404 Not Foundが返されます。

オブジェクトの特定のバージョンをダウンロードするには、GetObjectリクエストでバージョンIDを指定する必要があります。 次の図では、バージョンID 222222が指定されたGetObjectリクエストが開始され、バージョンIDが222222のオブジェクトがダウンロードされます。

OSS コンソールの使用

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

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

  3. 左側のナビゲーションツリーで、ファイル > オブジェクト を選択します。

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

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

OSS SDKの使用

次のサンプルコードは、一般的なプログラミング言語のOSS SDKを使用して、バージョン管理が有効なバケットからオブジェクトをダウンロードする方法の例を示しています。 他のプログラミング言語のOSS SDKを使用してオブジェクトをダウンロードする方法の詳細については、「概要」をご参照ください。

説明

Pythonの例では、Python 2が使用されます。

<?php
if (is_file(__DIR__) 。 '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__) 。 '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

OSS\OssClientを使用します。OSS\Core\OssExceptionを使用します。// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。  
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
$end point = "https://oss-cn-hangzhou.aliyuncs.com";
$bucket= "<yourBucketName>";
// オブジェクトのフルパスを指定します。 オブジェクトのフルパスにバケット名を含めることはできません。 例: Example /test.txt。 
$object = "<yourObjectName>";
// ダウンロードするバージョンのバージョンIDを指定します。 
$versionId = "<yourObjectVersionId>";

$ossClient = new OssClient($accessKeyId, $accessKeySecret, $end point);

try {
    // 指定したバージョンのオブジェクトをダウンロードします。 
    $content = $ossClient->getObject($bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId));
    印刷 ($content);
} catch(OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage()) 。 "\n");
    戻ります。}

print(__FUNCTION__) 。 ": OK" 。 "\n"); 
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、
  // バケットの名前を指定します。 
  bucket: 'yourbucketname'
});

async関数get() {
  // オブジェクトの名前を指定します。 
  const result = await client.get('filename', {    
      // ダウンロードしたオブジェクトのバージョンIDを表示します。 
      versionId: 'versionid' 、
  });
  console.log(result.content);
}
get();
# -*- coding: utf-8 -*-
oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート
# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
# バケットの名前を指定します。 
bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'yourBucketName')

# オブジェクトの特定のバージョンをダウンロードします。 
params = dict()
params['versionId'] = '<yourObjectVersionId>'
object_stream = bucket.get_object('<yourObjectName>', params=params)

# ダウンロードしたオブジェクトの内容を読み取ります。 
read_content = object_stream.read()
print('get object content:', read_content)
# ダウンロードしたオブジェクトのバージョンIDを表示します。 
print('get object versionid:', object_stream.versionid)

# オブジェクトのCRC-64チェックサムを計算する前に、get_objectによって返されるストリームからオブジェクトを読み取るには、read() を呼び出す必要があります。 
object_stream.client_crcの場合! =object_stream.server_crc:
   印刷 ("クライアントとサーバー间のCRCチェックサムが矛盾しています!") 
パッケージメイン

import (import (import)
  "fmt"
  "net/http"
  "os"  

  「github.com/aliyun/aliyun-oss-go-sdk/oss」
)

func main() {
    /// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // Create an OSSClient instance. 
    // バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。 
    client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
    if err! =nil {
      fmt.Println("Error:", err)
      os.Exit(-1)
  }

  // バケットの名前を指定します。 
  bucket, err := client.Bucket("<yourBucketName>")
  if err! =nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
  }

  var retHeader http.Header
  // IDがyourObjectVersionIdのバージョンをキャッシュにダウンロードします。 
  // オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 
  _, err = bucket.GetObject("youObjectName", oss.VersionId("yourObjectVersionId"), oss.GetResponseHeader(&retHeader))
  if err! =nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
  }
  // x-oss-version-idの値を表示します。 
  fmt.Println("x-oss-version-id:", oss.GetVersionId(retHeader))
} 
#include <alibabacloud/oss/OssClient.h>
名前空間listaCloud::OSSを使用します。int main(void)
{
    /* OSSへのアクセスに使用されるアカウントに関する情報を初期化します。 */
            
    /* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
    std::string Endpoint = "yourEndpoint";
    /* バケットの名前を指定します。 例: examplebucket. */
    std::string BucketName = "examplebucket";
    /* オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。 */
    std::string ObjectName = "exampledir/exampleobject.txt";

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

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

    /* オブジェクトをメモリにダウンロードします。 */
    GetObjectRequestリクエスト (BucketName, ObjectName);
    request.setVersionId("yourObjectVersionId");
    auto outcome = client.GetObject (リクエスト);
    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();
    0を返します。} 

ossutil の使用

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

RESTful API の使用

プログラムにカスタムオプションが必要な場合は、RESTful API操作を呼び出すことができます。 API操作を直接呼び出すには、コードに署名計算を含める必要があります。 詳しくは、「GetObject」をご参照ください。

オブジェクトの削除

DeleteObjectリクエストでオブジェクトのバージョンIDを指定するか、バージョン管理が有効なバケット内のオブジェクトのバージョンを完全に削除するようにライフサイクルルールを設定できます。 DeleteObjectリクエストでバージョンIDを指定しない場合、OSSはオブジェクトの現在のバージョンとして削除マーカーを追加します。

重要
  • 既定では、DeleteObjectリクエストでバージョンIDを指定しない場合、オブジェクトの現在のバージョンと以前のバージョンは削除されません。

  • バケットのOSS-HDFSとバージョン管理を有効にしないでください。

    バケットのOSS-HDFSとバージョン管理が有効になっている場合、期待どおりに機能しないOSS-HDFSがあります。 OSS-HDFSの安定性を確保するには、早期にバージョン管理を一時停止し、ライフサイクルルールを設定して削除マーカーを削除する必要があります。

    詳細については、「バケットのOSS-HDFSとバージョン管理を有効にした後に発生する問題を解決する方法」をご参照ください。

さらに、ライフサイクルルールでExpiration要素を指定して、バージョン管理が有効なバケット内のオブジェクトの現在のバージョンの有効期限を指定できます。 ライフサイクルルールでNoncurrentVersionExpiration要素を指定して、バージョン管理が有効なバケット内のオブジェクトの期限切れの以前のバージョンを完全に削除することもできます。 2つの要素には次の違いがあります。

  • Expiration要素は、オブジェクトの期限切れの現在のバージョンを保持するためにライフサイクルルールで指定されます。 Expiration要素が指定されたライフサイクルルールに基づいてオブジェクトの現在のバージョンが期限切れになると、OSSは現在のバージョンを以前のバージョンとして保存し、削除マーカーを現在のバージョンとして追加します。

  • NoncurrentVersionExpiration要素は、オブジェクトの期限切れの以前のバージョンを削除するためにライフサイクルルールで指定されています。 NoncurrentVersionExpiration要素が指定されたライフサイクルルールに基づいて削除された以前のバージョンは完全に削除され、復元できません。

詳細については、「構成要素」をご参照ください。

次のセクションでは、DeleteObjectリクエストでバージョンIDが指定されていない場合に、OSSがオブジェクトを削除する方法について説明します。

  • DeleteObjectリクエストでバージョンIDが指定されていない場合、削除するオブジェクトの現在のバージョンとして削除マーカーが追加されます。 削除マーカーには一意のバージョンIDがありますが、データとACLはありません。 次の図に示すように、バージョンIDが444444の削除マーカーが現在のバージョンとして追加されます。

  • DeleteObjectリクエストでバージョンIDが指定されている場合、指定されたバージョンは完全に削除されます。 次の図に示すように、IDが333333のバージョンは完全に削除されます。

OSS コンソールの使用

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

警告

オブジェクトを削除した後は、以前のバージョンを復元することはできません。 作業は慎重に行ってください。

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

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

  3. 左側のナビゲーションツリーで、ファイル > オブジェクト を選択します。

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

  5. 不要になったオブジェクトの以前のバージョンを見つけ、次の説明に基づいて操作を実行します。

    • 削除するオブジェクトの以前のバージョンが削除マーカーの場合、[操作] 列の 完全に削除 をクリックします。

    • 削除するオブジェクトの以前のバージョンが削除マーカーでない場合は、[操作] 列のimage.pngアイコンの上にポインターを移動し、完全に削除 をクリックします。

    オブジェクトの複数の以前のバージョンを削除するには、削除する以前のバージョンを選択し、オブジェクトリストの下にある 完全に削除 をクリックします。

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

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

OSS SDKの使用

次のサンプルコードは、一般的なプログラミング言語のOSS SDKを使用して、バージョン管理が有効なバケットから特定のバージョンのオブジェクトを削除する方法の例を示しています。 他のプログラミング言語のOSS SDKを使用してオブジェクトの特定のバージョンを削除する方法の詳細については、「概要」をご参照ください。

Aliyun.OSSを使用した
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。public classデモ {
    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";
        文字列versionId = "CAEQMxiBgICAof2D0BYiIDJhMGE3N2M1YTI1NDQzOGY5NTkyNTI3MGYyMzJm ****";

        // Create an OSSClient instance. 
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            // 指定したバージョンのオブジェクトを削除します。 
            ossClient.de leteVersion(bucketName, objectName , versionId);
        } catch (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
} 
<?php
if (is_file(__DIR__) 。 '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__) 。 '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

OSS\OssClientを使用します。OSS\Core\OssExceptionを使用します。// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
$end point = "https://oss-cn-hangzhou.aliyuncs.com";
$bucket= "<yourBucketName>";
// オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: Example /test.txt。 
$object = "<yourObjectName>";
$versionId = "<yourObjectVersionId>";

$ossClient = new OssClient($accessKeyId, $accessKeySecret, $end point);

try {
    // 指定したバージョンのオブジェクトを削除します。 
    $ossClient->deleteObject($bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId));
} catch(OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage()) 。 "\n");
    戻ります。}

print(__FUNCTION__) 。 ": OK" 。 "\n"); 
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、
  // バケットの名前を指定します。 
  bucket: 'yourbucketname'
});

// オブジェクトのバージョンIDを指定します。 
const versionId = "versionId";
// オブジェクトを指定します。 
const objectName = "exampleobject.txt";
async関数deleteVersionObject() {
  const result = await client.de lete(objectName, {)
    versionId,
  });
  console.log (結果);
}

deleteVersionObject();
# -*-コーディング: utf-8 -*-
osのインポート
oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート
# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
# バケットの名前を指定します。 
bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'yourBucketName')
# オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: Example /test.txt。 
object_name = 'yourObjectName'

# 削除するオブジェクトまたは削除マーカーのバージョンIDを指定します。 
params = dict()
params['versionId'] = 'yourObjectVersionIdOrDeleteMarkerVersionId'

# 特定のバージョンのオブジェクトまたは削除マーカーを削除します。 
result = bucket.de lete_object(object_name, params=params)
print("delete object name: ", object_name)
# リクエストでオブジェクトのバージョンIDが指定されている場合、レスポンスのdelete_markerヘッダーの値はNoneで、レスポンスのversionIdヘッダーの値はリクエストで指定されたバージョンIDです。 
# 削除マーカーのバージョンIDがリクエストで指定されている場合、レスポンスのdelete_markerヘッダーの値はTrueで、レスポンスのversionIdヘッダーの値はリクエストで指定されたバージョンIDです。 
if result.delete_marker:
    print("delete del-marker versionid: ",result.versionid)
else:
    印刷 ("delete object versionid:", result.versionid) 
;
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを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";
// OSSClientインスタンスを作成します。 
var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret);
トライ
{
    // 削除するオブジェクトまたは削除マーカーのバージョンIDを指定します。 
    var request = new DeleteObjectRequest(bucketName, objectName)
    {
        VersionId = versionid
    };
    client.DeleteObject (要求);
    Console.WriteLine("オブジェクトの削除が成功しました");
}
キャッチ (例外ex)
{
    Console.WriteLine("オブジェクトの削除に失敗しました。 {0}"、例えばメッセージ);
} 
パッケージメイン

import (import (import)
  "fmt"
  "os"

  「github.com/aliyun/aliyun-oss-go-sdk/oss」
)

func main() {
    /// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
    provider, err := oss.NewEnvironmentVariableCredentialsProvider()
    if err! =nil {
        fmt.Println("Error:", err)
        os.Exit(-1)
    }

    // Create an OSSClient instance. 
    // バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。 
    client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
    if err! =nil {
       fmt.Println("Error:", err)
       os.Exit(-1)
  }

  // バケットの名前を指定します。 
  bucket, err := client.Bucket("yourBucketName")
  if err! =nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
  }
  // オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 
  // yourObjectVersionIdをオブジェクトのバージョンIDに設定します。 このパラメーターを指定すると、指定したバージョンIDのオブジェクトが完全に削除されます。 
  err = bucket.DeleteObject("youObjectName", oss.VersionId("yourObjectVersionId"))
  if err! =nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
  }
} 
#include <alibabacloud/oss/OssClient.h>
名前空間listaCloud::OSSを使用します。int main(void)
{
    /* OSSへのアクセスに使用されるアカウントに関する情報を初期化します。 */
            
    /* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
    std::string Endpoint = "yourEndpoint";
    /* バケットの名前を指定します。 例: examplebucket. */
    std::string BucketName = "examplebucket";
    /* オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。 */
    std::string ObjectName = "exampledir/exampleobject.txt";

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

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

    /* 指定されたバージョンIDのオブジェクト、または指定されたバージョンIDの削除マーカーが現在のバージョンのオブジェクトを削除します。 */
    auto outcome = client.DeleteObject(DeleteObjectRequest(BucketName, ObjectName, "yourObjectVersionIdOrDeleteMarkerVersionId"));
    /* リクエストでオブジェクトのバージョンIDが指定されている場合、レスポンスのdelete_markerヘッダーの値はNoneになり、レスポンスのversionIdヘッダーの値はリクエストで指定されたバージョンIDになります。 */
    /* 削除マーカーのバージョンIDがリクエストで指定されている場合、レスポンスのdelete_markerヘッダーの値はTrueで、レスポンスのversionIdヘッダーの値はリクエストで指定されたバージョンIDです。 */
    if (!outcome.isSuccess()) {
        /* 例外を処理します。 */
        std::cout << "DeleteObject fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* ネットワークリソースなどのリソースを解放します。 */
    ShutdownSdk();
    0を返します。} 

ossutil の使用

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

RESTful API の使用

プログラムにカスタムオプションが必要な場合は、RESTful API操作を呼び出すことができます。 API操作を直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「DeleteObject」をご参照ください。

オブジェクトを復元する

バケットのバージョン管理が有効になっている場合、バケット内のオブジェクトのすべてのバージョンが保持されます。 オブジェクトの特定の以前のバージョンを現在のバージョンとして復元できます。

次のいずれかの方法を使用して、以前のバージョンのオブジェクトを現在のバージョンとして復元できます。

  • CopyObject操作を呼び出して、以前のバージョンのオブジェクトを同じバケットにコピーします。

    コピーされた以前のバージョンがオブジェクトの現在のバージョンになり、オブジェクトのすべてのバージョンが保持されます。

    次の図では、IDが222222の以前のバージョンが同じバケットにコピーされています。 OSSは、コピーしたバージョンの新しいバージョンID 444444を生成します。 コピーされたバージョンがオブジェクトの現在のバージョンになります。 したがって、オブジェクトには、同じ内容を持つ2つのバージョン、222222と444444があり、222222が以前のバージョンで、444444が現在のバージョンです。

  • オブジェクトの現行バージョンの永久削除

    次の図では、バージョンIDを指定したDeleteObjectリクエストを使用して、IDが222222の現在のバージョンが完全に削除されています。 IDが111111である最新の以前のバージョンが、オブジェクトの現在のバージョンになります。

重要

現在のバージョンは完全に削除された後は復元できないため、CopyObject操作を呼び出して以前のバージョンを現在のバージョンとして復元することをお勧めします。

OSS コンソールの使用

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

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

  3. 左側のナビゲーションツリーで、ファイル > オブジェクト を選択します。

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

  5. オブジェクトの特定の以前のバージョンを現在のバージョンとして復元します。

    重要

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

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

      復元する以前のバージョンの [操作] 列で、回復 をクリックします。

    • 複数のオブジェクトの以前のバージョンを復元する

      復元するバージョンを選択し、オブジェクトリストの下にある 回復 をクリックします。 表示されるメッセージで、[OK] をクリックします。

OSS SDKの使用

次のサンプルコードは、一般的なプログラミング言語のOSS SDKを使用して、バージョン管理が有効なバケットから特定のバージョンのオブジェクトをコピーする方法の例を示しています。 他のプログラミング言語のOSS SDKを使用してオブジェクトの特定のバージョンをコピーする方法の詳細については、「概要」をご参照ください。

com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo delをインポートします。*;

public classデモ {
    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();
        // ソースバケットの名前を指定します。 
        文字列sourceBucketName = "srcexamplebucket";
        // ソースオブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 
        文字列sourceObjectName = "srcexampleobject.txt";
        // 宛先バケットの名前を指定します。 宛先バケットは、ソースバケットと同じリージョンに配置する必要があります。 
        文字列destinationBucketName = "desexamplebucket";
        // 宛先オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 
        文字列destinationObjectName = "desexampleobject.txt";
        文字列versionId = "CAEQMxiBgICAof2D0BYiIDJhMGE3N2M1YTI1NDQzOGY5NTkyNTI3MGYyMzJm ****";

        // Create an OSSClient instance. 
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        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 (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
} 
<?php
if (is_file(__DIR__) 。 '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__) 。 '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

OSS\OssClientを使用します。OSS\Core\OssExceptionを使用します。// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
$end point = "https://oss-cn-hangzhou.aliyuncs.com";
$bucket= "<yourBucketName>";
// オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: Example /test.txt。 
$object = "<yourObjectName>";
$versionId = "<yourObjectVersionId>";
$to_bucket = $bucket;
$to_object = $object '.copy';

$ossClient = new OssClient($accessKeyId, $accessKeySecret, $end point);

try {
    // 指定したバージョンのオブジェクトをコピーします。 
    $ret = $ossClient->copyObject($bucket、$object、$to_bucket、$to_object、配列 (OssClient:::OSS_VERSION_ID => $versionId));
    print("versionId:" .$ret['x-oss-version-id']);
} catch(OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage()) 。 "\n");
    戻ります。}

print(__FUNCTION__) 。 ": OK" 。 "\n");    
            
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、
  // バケットの名前を指定します。 
  bucket: 'yourbucketname'
});

// ソースオブジェクトのバージョンIDを指定します。 
const versionId = 'versionId';
// コピーするソースオブジェクトを指定します。 
const srcObject = 'srcObject.txt ';
// ソースバケットを指定します。 
const srcBucket = 'srcBucket;
// 宛先オブジェクトを指定します。 
const targetObject = 'targetObject.txt ';
async関数Copy() {
  try {
    const result = await client.copy(targetObject, srcObject, srcBucket, {)
      meta: {
        versionId: versionId
      }
    });

    console.log (結果);
  } catch (エラー) {
    console.error (エラー);
  }
}

コピー ()
# -*-コーディング: utf-8 -*-
oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート

# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# ソースバケットの名前を指定します。 例: srcexamplebucket. 
src_bucket_name = 'srcexamplebucket'
# 宛先バケットの名前を指定します。 宛先バケットは、ソースバケットと同じリージョンにある必要があります。 例: destexamplebucket。 
# バケット内のオブジェクトをコピーする場合は、送信元バケットと送信先バケットに同じバケット名を指定してください。 
dest_bucket_name = 'destexamplebucket'
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', dest_bucket_name)

# ソースオブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。 
src_object_name = 'srcexampledir/exampleobject.txt'
# 宛先オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。 
dest_object_name = 'destexampledir/exampleobject.txt'
# オブジェクトのバージョンIDを指定します。 
versionId = 'CAEQMxiBgICAof2D0BYiIDJhMGE3N2M1YTI1NDQzOGY5NTkyNTI3MGYyMzJm ****'

# 指定したバージョンのソースオブジェクトをコピーします。 
params = dict()
params['versionId'] = versionId

# ソースオブジェクトをソースバケットから宛先バケットにコピーします。 
result = bucket.copy_object(src_bucket_name, src_object_name, dest_object_name, params=params)
# レスポンスを表示します。 戻り値が200の場合、ソースオブジェクトは宛先バケットにコピーされます。 
Aliyun.OSSを使用した
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";
// OSSClientインスタンスを作成します。 
var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret);
トライ
{
    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=メタデータ、 
        // オブジェクトのバージョンIDを指定します。 
        SourceVersionId = versionid
    };
    // オブジェクトをコピーします。 
    var result = client.CopyObject(req);
    Console.WriteLine("Copy object successed, vesionid:{0}", result.VersionId);
}
キャッチ (OssException ex)
{
    Console.WriteLine("Failed with error code: {0}; エラー情報: {1} 。 \nRequestID: {2} \tHostID: {3}"、
        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
キャッチ (例外ex)
{
    Console.WriteLine("Failed with error info: {0}" 、メッセージなど);
} 
の印刷 ('result.status:', result.status) 
#include <alibabacloud/oss/OssClient.h>
名前空間listaCloud::OSSを使用します。int main(void)
{
    /* OSSへのアクセスに使用されるアカウントに関する情報を初期化します。 */
            
    /* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
    std::stringエンドポイント="https://oss-cn-hangzhou.aliyuncs.com";
    /* ソースバケットの名前を指定します。 例: 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;
    /* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClientクライアント (Endpoint, credentialsProvider, conf);

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

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

    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();
    0を返します。} 

ossutil の使用

ossutilを使用して、バージョン管理が有効なバケットで以前のバージョンのオブジェクトを現在のバージョンとして復元する方法の詳細については、「オブジェクトのコピー」をご参照ください。

RESTful API の使用

プログラムにカスタムオプションが必要な場合は、RESTful API操作を呼び出すことができます。 API操作を直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「CopyObject」をご参照ください。