誤った上書きや削除は、回復不能なデータ損失を引き起こす可能性があります。バージョン管理が有効な場合、Object Storage Service (OSS) はバケット内の各オブジェクトのすべてのバージョンを保持するため、いつでも以前のバージョンをリスト表示、ダウンロード、または復元できます。OSS は各バージョンに一意のバージョン ID を割り当てます。バージョン管理が有効になっている場合でも、既存のオブジェクトとそのアクセス制御リスト (ACL) は変更されません。
バージョン管理が有効になる前にアップロードされたオブジェクトのバージョン ID は、null に設定されます。
詳細については、「バージョン管理」をご参照ください。
オブジェクトのアップロード
バージョン管理が有効なバケットにオブジェクトをアップロードすると、OSS はアップロードされたオブジェクトに一意のバージョン ID を生成します。既存のオブジェクトと同じキーを持つオブジェクトをアップロードすると、OSS は新しいアップロードを現在のバージョンとして保存し、以前のアップロードを以前のバージョンとして保持します。
OSS は、PutObject、PostObject、CopyObject、または MultipartUpload 操作を使用してアップロードされた各オブジェクトに一意のバージョン ID を生成します。
OSS コンソールの使用
OSS コンソールにログインします。
左側のナビゲーションウィンドウで、[バケット] をクリックします。「バケット」ページで、目的のバケットを探してクリックします。
左側のナビゲーションツリーで、[オブジェクト管理] > [オブジェクト] を選択します。
「[オブジェクト]」ページで、「[オブジェクトのアップロード]」をクリックします。
[アップロード オブジェクト] ページで、以下のパラメーターを設定します。
基本設定を構成します。 | パラメーター | 説明 | |-----------|-------------| | [アップロード先] | アップロード後にオブジェクトが格納されるディレクトリです。[現在のディレクトリ]: オブジェクトを現在のディレクトリにアップロードします。[指定されたディレクトリ]: オブジェクトを指定されたディレクトリにアップロードします。ディレクトリが存在しない場合、OSS が自動的に作成します。ディレクトリ名は、UTF-8 でエンコードされた 1~254 文字である必要があります。
/または\で始まらず、連続した/を含まず、..にはできません。 | | [オブジェクト ACL] | オブジェクトの ACL です。[バケットから継承]: バケットと同じ ACL を使用します。[プライベート]: オブジェクト所有者および承認済みユーザーのみが、オブジェクトの読み取りおよび書き込みを行うことができます。[パブリック読み取り]: すべてのユーザーがオブジェクトを読み取ることができます。[パブリック読み取り/書き込み]: すべてのユーザーがオブジェクトの読み取りおよび書き込みを行うことができます。詳細については、「Object ACLs」をご参照ください。 | | [アップロードするファイル] | [ファイルの選択] をクリックしてファイルを選択するか、[フォルダーの選択] をクリックしてディレクトリを選択します。また、このセクションにファイルをドラッグすることもできます。バージョン管理が有効化されたバケットでは、既存のオブジェクトと同じ名前のファイルをアップロードすると、既存のオブジェクトが以前のバージョンになります。 |オプション: [詳細設定] の横にある展開アイコンをクリックして、ストレージクラス、暗号化、およびメタデータを設定します。 | パラメーター | 説明 | |-----------|-------------| | [ストレージクラス] | [バケットから継承] (デフォルト)、[標準]、[IA] (課金対象の最小サイズ: 64 KB、最小保存期間: 30 日)、[アーカイブ] (課金対象の最小サイズ: 64 KB、最小保存期間: 60 日、解凍時間: 約 1 分)、[コールドアーカイブ] (課金対象の最小サイズ: 64 KB、最小保存期間: 180 日)、または [ディープコールドアーカイブ] (課金対象の最小サイズ: 64 KB、最小保存期間: 180 日)。詳細については、「ストレージクラス」をご参照ください。 | | [暗号化方法] | [バケットから継承] (デフォルト)、[OSS 管理] (OSS が暗号鍵を管理)、または [KMS] (Key Management Service に格納されたカスタマーマスターキー (CMK) を使用)。KMS の場合、[CMK] を選択します。[alias/acs/oss] (デフォルト CMK) または [alias/<cmkname>] (カスタム CMK)。 AES256 のみがサポートされています。 詳細については、「専用 KMS インスタンスの購入」をご参照ください。 | | [ユーザー定義メタデータ] |
x-oss-meta-で始まるカスタムメタデータヘッダー。すべてのユーザー定義メタデータの合計サイズは 8 KB を超えることはできません。 |[オブジェクトのアップロード] をクリックします。
アップロードの進行状況は、[アップロードタスク] タブの [タスク一覧] パネルで確認できます。
OSS SDK の使用
次の例は、バージョン管理が有効なバケットにオブジェクトをアップロードする方法を示しています。他の言語の SDK については、「概要」をご参照ください。
Java
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";
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
String bucketName = "examplebucket";
String region = "cn-hangzhou";
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("OSSException が発生しました。これは、リクエストが 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 ce) {
System.out.println("ClientException が発生しました。これは、クライアントが OSS との通信を試みている際に、ネットワークにアクセスできないなどの重大な内部問題に遭遇したことを意味します。");
System.out.println("エラーメッセージ:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}Node.js
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();Python
using System.Text;
using Aliyun.OSS;
using Aliyun.OSS.Common;
var endpoint = "yourEndpoint";
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
var bucketName = "examplebucket";
var objectName = "exampleobject.txt";
var objectContent = "More than just cloud.";
const string region = "cn-hangzhou";
var conf = new ClientConfiguration();
conf.SignatureVersion = SignatureVersion.V4;
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);
}Go
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
)
func init() {
flag.StringVar(®ion, "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)
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)
}
log.Printf("put object result versionId:%#v\n", *result.VersionId)
}C#
using System.Text;
using Aliyun.OSS;
using Aliyun.OSS.Common;
var endpoint = "yourEndpoint";
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
var bucketName = "examplebucket";
var objectName = "exampleobject.txt";
var objectContent = "More than just cloud.";
const string region = "cn-hangzhou";
var conf = new ClientConfiguration();
conf.SignatureVersion = SignatureVersion.V4;
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); // オブジェクトのアップロードに失敗しました
}C++
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
std::string Endpoint = "yourEndpoint";
std::string Region = "yourRegion";
std::string BucketName = "examplebucket";
std::string ObjectName = "exampledir/exampleobject.txt";
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
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" << // PutObject に失敗しました
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
ShutdownSdk();
return 0;
}PHP
<?php
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"; // エラー: 次の引数が必要です: --$key, $help
exit(1);
}
}
$region = $options["region"];
$bucket = $options["bucket"];
$key = $options["key"];
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
$client = new Oss\Client($cfg);
$data = 'Hello OSS';
$request = new Oss\Models\PutObjectRequest(
bucket: $bucket,
key: $key,
);
$request->body = Oss\Utils::streamFor($data);
$result = $client->putObject($request);
printf(
'status code:' . $result->statusCode . PHP_EOL . // 状態コード:
'request id:' . $result->requestId . PHP_EOL . // リクエスト ID:
'etag:' . $result->etag . PHP_EOL
);ossutil の使用
詳細については、「cp (ファイルのアップロード)」をご参照ください。
RESTful API の使用
プログラムでより多くのカスタムオプションが必要な場合は、RESTful API 操作を呼び出すことができます。コードに署名計算を含める必要があります。詳細については、「PutObject」をご参照ください。
オブジェクトのリスト表示
GetBucketVersions (ListObjectVersions) 操作を呼び出すと、削除マーカーを含む、バージョン管理が有効なバケット内のすべてのオブジェクトバージョンをリスト表示できます。
GetBucket (ListObject) 操作は、削除マーカーではない現在のオブジェクトバージョンのみを返します。
1 つの GetBucketVersions (ListObjectVersions) リクエストは、最大 1,000 個のオブジェクトバージョンを返します。すべてのバージョンをリスト表示するには、複数のリクエストを送信します。
バージョンは、オブジェクトキーのアルファベット順、次に各バージョンが作成された時間の順に返されます。
OSS コンソールの使用
OSS コンソールにログインします。
左側のナビゲーションウィンドウで、[バケット] をクリックします。バケットページで、目的のバケットの名前をクリックします。
ページにはすべてのオブジェクトの現在のバージョンが表示されます。削除マーカーを含むすべてのバージョンを表示するには、[オブジェクト] ページの [以前のバージョン] の右側にある [表示] をクリックします。
OSS SDK の使用
以下の例では、バージョン管理が有効化されたバケットでオブジェクトを一覧表示する方法を示します。他の言語の SDK については、「概要」をご参照ください。
Java
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";
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
String bucketName = "examplebucket";
String region = "cn-hangzhou";
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("OSSException がキャッチされました。これは、リクエストが 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 ce) {
System.out.println("ClientException がキャッチされました。これは、クライアントが OSS と通信しようとしたときに、ネットワークにアクセスできないなどの深刻な内部問題に遭遇したことを意味します。");
System.out.println("エラーメッセージ:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}Node.js
const OSS = require("ali-oss");
const client = new OSS({
region: 'yourregion',
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();Python
import argparse
import alibabacloud_oss_v2 as oss
parser = argparse.ArgumentParser(description="list object versions sample") # オブジェクトバージョンをリストするサンプル
parser.add_argument('--region', help='The region in which the bucket is located.', required=True) # バケットが配置されているリージョン。
parser.add_argument('--bucket', help='The name of the bucket.', required=True) # バケットの名前。
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS') # 他のサービスが OSS にアクセスするために使用できるドメイン名。
def main():
args = parser.parse_args()
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
cfg.region = args.region
if args.endpoint is not None:
cfg.endpoint = args.endpoint
client = oss.Client(cfg)
paginator = client.list_object_versions_paginator()
for page in paginator.iter_page(oss.ListObjectVersionsRequest(
bucket=args.bucket,
)
):
for o in page.version:
print(f'Object version: {o.key}, Size: {o.size}, Version_id: {o.version_id}, Last_modified: {o.last_modified}') # オブジェクトバージョン: {o.key}, サイズ: {o.size}, バージョン ID: {o.version_id}, 最終変更日時: {o.last_modified}
if __name__ == "__main__":
main()ossutil の使用
詳細については、「ls (アカウントレベルのリソースをリスト表示)」をご参照ください。
RESTful API の使用
プログラムでより多くのカスタムオプションが必要な場合は、RESTful API 操作を呼び出すことができます。コードに署名計算を含める必要があります。詳細については、「ListObjectVersions (GetBucketVersions)」をご参照ください。
オブジェクトのダウンロード
バージョン管理が有効なバケットから、オブジェクトの現在のバージョンまたは特定のバージョンをダウンロードします。
| リクエストタイプ | 動作 |
|---|---|
| バージョン ID なしの GetObject | 現在のバージョンを返します。現在のバージョンが削除マーカーの場合、404 Not Found を返します。 |
| バージョン ID 付きの GetObject | 指定されたバージョンを返します。 |
OSS コンソールの使用
OSS コンソールにログインします。
左側のナビゲーションウィンドウで、[バケット] をクリックします。バケットページで、目的のバケットを探してクリックします。
左側のナビゲーションツリーで、オブジェクト管理 > オブジェクト を選択します。
[オブジェクト]ページで、[表示]を[以前のバージョン]の右側でクリックします。
ダウンロードするバージョンをクリックします。表示されるパネルで、[オブジェクト URL] の右側にある [ダウンロード] をクリックします。
OSS SDK の使用
次の例は、バージョン管理が有効なバケットからオブジェクトをダウンロードする方法を示しています。他の言語の SDK については、「概要」をご参照ください。
Node.js
const OSS = require('ali-oss');
const client = new OSS({
region: 'yourregion',
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
bucket: 'yourbucketname'
});
async function get() {
const result = await client.get('filename', {
versionId: 'versionid',
});
console.log(result.content);
}
get();C++
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
std::string Endpoint = "yourEndpoint";
std::string Region = "yourRegion";
std::string BucketName = "examplebucket";
std::string ObjectName = "exampledir/exampleobject.txt";
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
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; // getObjectToBuffer 成功, コンテンツ長:
std::string content;
*(outcome.result().Content()) >> content;
std::cout << "getObjectToBuffer" << "content:" << content << std::endl; // getObjectToBuffer コンテンツ:
std::cout << "versionid:" << outcome.result().VersionId() << std::endl;
}
else {
std::cout << "getObjectToBuffer fail" << // getObjectToBuffer に失敗しました
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
ShutdownSdk();
return 0;
}Python
import argparse
import alibabacloud_oss_v2 as oss
parser = argparse.ArgumentParser(description="get object sample") # オブジェクトの取得サンプル
parser.add_argument('--region', help='The region in which the bucket is located.', required=True) # バケットが配置されているリージョン。
parser.add_argument('--bucket', help='The name of the bucket.', required=True) # バケットの名前。
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS') # 他のサービスが OSS にアクセスするために使用できるドメイン名。
parser.add_argument('--key', help='The name of the object.', required=True) # オブジェクトの名前。
parser.add_argument('--version_id', help='The version ID of the object.', required=True) # オブジェクトのバージョン ID。
def main():
args = parser.parse_args()
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
cfg.region = args.region
if args.endpoint is not None:
cfg.endpoint = args.endpoint
client = oss.Client(cfg)
result = client.get_object(oss.GetObjectRequest(
bucket=args.bucket,
key=args.key,
version_id=args.version_id,
))
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
f' version id: {result.version_id},'
)
content = result.body.read()
with open('./test.txt', 'wb') as f:
f.write(content)
print(f'File saved to test.txt successfully!') # ファイルは test.txt に正常に保存されました!
if __name__ == "__main__":
main()Go
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
)
func init() {
flag.StringVar(®ion, "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)
client := oss.NewClient(cfg)
request := &oss.GetObjectRequest{
Bucket: oss.Ptr(bucketName),
Key: oss.Ptr(objectName),
VersionId: oss.Ptr("yourVersionId"),
}
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) // ファイルは %s に正常にダウンロードされました
}PHP
<?php
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" . PHP_EOL; // エラー: 次の引数が必要です: --$key, $help
exit(1);
}
}
$region = $options["region"];
$bucket = $options["bucket"];
$key = $options["key"];
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
$client = new Oss\Client($cfg);
$request = new Oss\Models\GetObjectRequest(
bucket: $bucket,
key: $key,
versionId:"yourVersionId",
);
$result = $client->getObject($request);
$localFilePath = './test/file.txt';
file_put_contents($localFilePath, $result->body->getContents());
printf(
'status code:' . $result->statusCode . PHP_EOL . // 状態コード:
'request id:' . $result->requestId . PHP_EOL // リクエスト ID:
);ossutil の使用
詳細については、「オブジェクトのダウンロード」をご参照ください。
RESTful API の使用
プログラムでより多くのカスタムオプションが必要な場合は、RESTful API 操作を呼び出すことができます。コードに署名計算を含める必要があります。詳細については、「GetObject」をご参照ください。
オブジェクトの削除
バージョン管理が有効なバケット内のオブジェクトの削除は、バージョン ID を指定するかどうかによって動作が異なります。
| 削除方法 | 動作 | 元に戻せますか? |
|---|---|---|
| バージョン ID なし (ソフト削除) | OSS は新しい現在のバージョンとして削除マーカーを追加します。既存のすべてのバージョンは保持されます。 | はい。削除マーカーを削除するか、以前のバージョンを復元します。 |
| バージョン ID 付き (完全削除) | OSS は指定されたバージョンを完全に削除します。 | いいえ。削除されたバージョンは回復できません。 |
デフォルトでは、DeleteObject リクエストでバージョン ID を指定しない場合、オブジェクトの現在のバージョンと以前のバージョンは削除されません。
バケットに対して OSS-HDFS とバージョン管理を同時に有効にしないでください。そうしないと、OSS-HDFS が期待どおりに動作しない可能性があります。この問題を解決するには、バージョン管理を一時停止し、ライフサイクルルールを設定して削除マーカーを削除します。詳細については、「バケットに対して OSS-HDFS とバージョン管理を有効にした後に発生する問題を解決するにはどうすればよいですか?」をご参照ください。
ライフサイクルルールによるバージョンクリーンアップの自動化
ライフサイクルルールを設定して、バージョンの有効期限を自動的に管理できます。
| ライフサイクル要素 | 動作 | 元に戻せますか? |
|---|---|---|
| 有効期限 | 現在のバージョンは以前のバージョンになります。新しい現在のバージョンとして削除マーカーが追加されます。 | はい。以前のバージョンはまだ存在します。 |
| 非現行バージョン有効期限 | 期限切れの以前のバージョンを完全に削除します。 | いいえ。削除されたバージョンは復元できません。 |
詳細については、「構成要素」をご参照ください。
OSS コンソールの使用
ストレージコストを削減するために、不要になった以前のバージョンを削除します。
以前のバージョンは完全に削除された後、復元できません。慎重に進めてください。
OSS コンソールにログインします。
左側のナビゲーションウィンドウで、[バケット] をクリックします。「バケット」ページで、目的のバケットを見つけてクリックします。
左側のナビゲーションツリーで、オブジェクト管理 > オブジェクト を選択します。
[オブジェクト]ページで、[以前のバージョン]の右側にある[表示]をクリックします。
削除する以前のバージョンを検索します。複数の以前のバージョンを削除するには、それらを選択して、オブジェクト リストの下にある[完全に削除]をクリックします。
前のバージョンが削除マーカーの場合、[完全に削除] を [操作] 列でクリックします。
以前のバージョンが削除マーカーでない場合は、[アクション] 列のアイコン上にポインターを移動し、[完全に削除] をクリックします。
[OK] をクリックします。
ライフサイクルルールを設定して、以前のバージョンを定期的に削除することもできます。詳細については、「ライフサイクル」をご参照ください。
OSS SDK の使用
次の例は、オブジェクトの特定のバージョンを削除する方法を示しています。他の言語の SDK については、「概要」をご参照ください。
Java
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";
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
String bucketName = "examplebucket";
String objectName = "exampledir/object";
String versionId = "CAEQMxiBgICAof2D0BYiIDJhMGE3N2M1YTI1NDQzOGY5NTkyNTI3MGYyMzJm****";
String region = "cn-hangzhou";
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("OSSException がキャッチされました。これは、リクエストが 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 ce) {
System.out.println("ClientException がキャッチされました。これは、クライアントが OSS と通信しようとしたときに、ネットワークにアクセスできないなどの深刻な内部問題に遭遇したことを意味します。");
System.out.println("エラーメッセージ:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}Node.js
const OSS = require("ali-oss");
const client = new OSS({
region: 'yourregion',
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
bucket: 'yourbucketname'
});
const versionId = "versionId";
const objectName = "exampleobject.txt";
async function deleteVersionObject() {
const result = await client.delete(objectName, {
versionId,
});
console.log(result);
}
deleteVersionObject();C#
using Aliyun.OSS;
using Aliyun.OSS.Common;
var endpoint = "yourEndpoint";
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
var bucketName = "examplebucket";
var objectName = "exampledir/exampleobject.txt";
var versionid = "yourObjectVersionidOrDelMarkerVersionid";
const string region = "cn-hangzhou";
var conf = new ClientConfiguration();
conf.SignatureVersion = SignatureVersion.V4;
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
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); // オブジェクトの削除に失敗しました
}C++
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
std::string Endpoint = "yourEndpoint";
std::string Region = "yourRegion";
std::string BucketName = "examplebucket";
std::string ObjectName = "exampledir/exampleobject.txt";
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
auto outcome = client.DeleteObject(DeleteObjectRequest(BucketName, ObjectName, "yourObjectVersionIdOrDeleteMarkerVersionId"));
if (!outcome.isSuccess()) {
std::cout << "DeleteObject fail" << // DeleteObject に失敗しました
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
ShutdownSdk();
return 0;
}Go
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
)
func init() {
flag.StringVar(®ion, "region", "", "バケットが配置されているリージョン。")
flag.StringVar(&bucketName, "bucket", "", "バケット名。")
flag.StringVar(&objectName, "object", "", "オブジェクト名。")
}
func main() {
flag.Parse()
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーター、バケット名が必要です")
}
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーター、リージョンが必要です")
}
if len(objectName) == 0 {
flag.PrintDefaults()
log.Fatalf("無効なパラメーター、オブジェクト名が必要です")
}
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
request := &oss.RestoreObjectRequest{
Bucket: oss.Ptr(bucketName),
Key: oss.Ptr(objectName),
VersionId: oss.Ptr("yourVersionId"),
RestoreRequest: &oss.RestoreRequest{
Days: 3,
},
}
result, err := client.RestoreObject(context.TODO(), request)
if err != nil {
log.Fatalf("オブジェクトの解凍に失敗しました %v", err)
}
log.Printf("オブジェクトの解凍結果:%#v\n", result)
}PHP
<?php
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" . PHP_EOL; // エラー: 次の引数が必要です: --$key, $help
exit(1);
}
}
$region = $options["region"];
$bucket = $options["bucket"];
$key = $options["key"];
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
$client = new Oss\Client($cfg);
$request = new Oss\Models\DeleteObjectRequest(
bucket: $bucket,
key: $key,
versionId:"yourversionid",
);
$result = $client->deleteObject($request);
printf(
'status code:' . $result->statusCode . PHP_EOL . // 状態コード:
'request id:' . $result->requestId . PHP_EOL // リクエスト ID:
);ossutil の使用
詳細については、「rm (削除)」をご参照ください。
RESTful API の使用
プログラムでより多くのカスタムオプションが必要な場合は、RESTful API 操作を呼び出すことができます。コードに署名計算を含める必要があります。詳細については、「DeleteObject」をご参照ください。
オブジェクトの復元
バージョン管理が有効な場合、すべてのオブジェクトバージョンが保持されます。次のいずれかの方法を使用して、以前のバージョンを現在のバージョンとして復元できます。
| 復元方法 | 仕組み | リスクレベル |
|---|---|---|
| CopyObject (推奨) | 以前のバージョンを同じバケットにコピーします。OSS はコピーに対して新しいバージョン ID を生成し、それが現在のバージョンになります。既存のすべてのバージョンは保持されます。 | 低。データ損失はありません。 |
| バージョン ID 付きの DeleteObject | 現在のバージョンを完全に削除します。最新の以前のバージョンが新しい現在のバージョンになります。 | 高。削除されたバージョンは回復できません。 |
可能な限り CopyObject を使用して復元してください。DeleteObject は現在のバージョンを完全に削除するため、回復できません。
OSS コンソールの使用
OSS コンソールにログインします。
左側のナビゲーションウィンドウで、[バケット] をクリックします。[バケット] ページで、目的のバケットを探してクリックします。
左側のナビゲーションツリーで、[オブジェクト管理] > [オブジェクト] を選択します。
[オブジェクト] ページで、[以前のバージョン] の右側にある [表示] をクリックします。
以前のバージョンを現在のバージョンとして復元します。
単一バージョンの復元:対象の以前のバージョンの[アクション]列の[復元]をクリックします。
複数のバージョンを復元する: 復元するバージョンを選択し、オブジェクトリストの下にある[Restore] をクリックします。表示されるメッセージで、[OK] をクリックします。
重要一度に復元できる以前のバージョンは 1 つだけです。復元する以前のバージョンは削除マーカーであってはなりません。
OSS SDK の使用
次の例は、オブジェクトの特定のバージョンをコピーして復元する方法を示しています。他の言語の SDK については、「概要」をご参照ください。
Java
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";
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
String sourceBucketName = "srcexamplebucket";
String sourceObjectName = "srcexampleobject.txt";
String destinationBucketName = "desexamplebucket";
String destinationObjectName = "desexampleobject.txt";
String versionId = "CAEQMxiBgICAof2D0BYiIDJhMGE3N2M1YTI1NDQzOGY5NTkyNTI3MGYyMzJm****";
String region = "cn-hangzhou";
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()); // 宛先オブジェクトのバージョン ID:
} catch (OSSException oe) {
System.out.println("OSSException がキャッチされました。これは、リクエストが 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 ce) {
System.out.println("ClientException がキャッチされました。これは、クライアントが OSS と通信しようとしたときに、ネットワークにアクセスできないなどの深刻な内部問題に遭遇したことを意味します。");
System.out.println("エラーメッセージ:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}Node.js
const OSS = require('ali-oss');
const client = new OSS({
region: 'yourregion',
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
bucket: 'yourbucketname'
});
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()C#
using Aliyun.OSS;
using Aliyun.OSS.Common;
var endpoint = "yourEndpoint";
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";
var versionid = "yourArchiveObjectVersionid";
const string region = "cn-hangzhou";
var conf = new ClientConfiguration();
conf.SignatureVersion = SignatureVersion.V4;
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 = metadata,
SourceVersionId = versionid
};
var result = client.CopyObject(req);
Console.WriteLine("Copy object succeeded, vesionid:{0}", result.VersionId); // オブジェクトのコピーに成功しました、バージョン ID:
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID: {2} \tHostID: {3}", // エラーコード: {0}; エラー情報: {1} で失敗しました。リクエスト ID: {2} ホスト ID: {3}
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message); // エラー情報: {0} で失敗しました
}C++
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
std::string Endpoint = "yourEndpoint";
std::string Region = "yourRegion";
std::string SourceBucketName = "srcexamplebucket";
std::string CopyBucketName = "destbucket";
std::string SourceObjectName = "srcdir/scrobject.txt";
std::string CopyObjectName = "destdir/destobject.txt";
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
CopyObjectRequest request(CopyBucketName, CopyObjectName);
request.setCopySource(SourceBucketName, SourceObjectName);
request.setVersionId("yourSourceObjectVersionId");
auto outcome = client.CopyObject(request);
if (outcome.isSuccess()) {
std::cout << "versionid:" << outcome.result().VersionId() << std::endl;
}
else {
std::cout << "CopyObject fail" << // CopyObject に失敗しました
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
ShutdownSdk();
return 0;
}Go
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
)
func init() {
flag.StringVar(®ion, "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)
client := oss.NewClient(cfg)
request := &oss.RestoreObjectRequest{
Bucket: oss.Ptr(bucketName),
Key: oss.Ptr(objectName),
VersionId: oss.Ptr("yourVersionId"),
RestoreRequest: &oss.RestoreRequest{
Days: 3,
},
}
result, err := client.RestoreObject(context.TODO(), request)
if err != nil {
log.Fatalf("failed to restore object %v", err) // オブジェクトの復元に失敗しました
}
log.Printf("restore object result:%#v\n", result) // オブジェクトの復元結果:
}ossutil の使用
詳細については、「復元」をご参照ください。
RESTful API の使用
プログラムでより多くのカスタムオプションが必要な場合は、RESTful API 操作を呼び出すことができます。コードに署名計算を含める必要があります。詳細については、「CopyObject」をご参照ください。