シンプルダウンロードでは、GetObject API オペレーションを使用して、単一の HTTP リクエストでオブジェクトをダウンロードします。
前提条件
-
オブジェクトが OSS にアップロード済みである必要があります。詳細については、「オブジェクトのアップロード」をご参照ください。
-
アーカイブストレージクラスのオブジェクトをダウンロードする場合は、事前にオブジェクトを復元するか、バケットに対してArchive Direct Read を有効にしておく必要があります。詳細については、「オブジェクトの復元」をご参照ください。
-
コールドアーカイブまたはディープコールドアーカイブストレージクラスのオブジェクトをダウンロードする場合は、事前に復元する必要があります。詳細については、「オブジェクトの復元」をご参照ください。
方法
コンプライアンスおよびセキュリティを向上させるためのポリシー変更により、2025 年 3 月 20 日以降、新しい OSS ユーザーは、中国本土リージョンにある OSS バケットに対してデータ API オペレーションを実行する際にカスタムドメイン名(CNAME)を使用する必要があります。これらのオペレーションでは、デフォルトのパブリックエンドポイントが制限されます。公式アナウンスを参照して、影響を受けるオペレーションの完全なリストをご確認ください。HTTPS 経由でデータにアクセスする場合は、カスタムドメインに有効な SSL 証明書をバインドする必要があります。これは、コンソールが HTTPS を強制するため、OSS コンソールへのアクセスに必須です。
OSS コンソール
OSS コンソールからディレクトリ(サブディレクトリを含む)をダウンロードすることはできません。ディレクトリをダウンロードするには、ossbrowser、ossutil、OSS SDK、または API オペレーションなどのツールをご利用ください。
-
OSS コンソールにログインします。
-
左側のナビゲーションウィンドウで、バケット をクリックします。表示されたページで、対象のバケット名をクリックします。
-
左側のナビゲーションウィンドウで、オブジェクト管理 > オブジェクト の順に選択します。
-
1 つまたは複数のオブジェクトをダウンロードします。
-
単一オブジェクトのダウンロード
方法 1:対象オブジェクトの **[操作]** 列で、
> ダウンロード を選択します。説明この操作をデフォルトの さらに追加 セクションから [よく使う操作] セクションに移動している場合、
アイコンを展開せずに直接オプションをクリックできます。方法 2:対象オブジェクトの名前をクリックするか、**[操作]** 列で 詳細 をクリックします。表示される 詳細 パネルで、ダウンロード をクリックします。
-
複数オブジェクトのダウンロード
複数のオブジェクトを選択し、ダウンロード をクリックします。OSS コンソールからは一度に最大 100 個のオブジェクトをダウンロードできます。
-
ossbrowser
ossbrowser は OSS コンソールでサポートされているものと同様のオブジェクトレベルの操作をサポートしています。ossbrowser クライアントの画面上の指示に従って、シンプルダウンロードを実行してください。ossbrowser の使用方法の詳細については、「一般的な操作」をご参照ください。
OSS SDK
以下のセクションでは、一般的なプログラミング言語向けの OSS SDK を使用したシンプルダウンロードのコード例を示します。その他の OSS SDK を使用したシンプルダウンロードについては、「SDK 概要」をご参照ください。
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.GetObjectRequest;
import java.io.File;
public class Demo {
public static void main(String[] args) throws Exception {
// この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET の環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケット名を指定します。例:examplebucket。
String bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。バケット名はパスに含めないでください。例:testfolder/exampleobject.txt。
String objectName = "testfolder/exampleobject.txt";
// オブジェクトをダウンロードするローカルファイルの完全なパスを指定します。
String pathName = "D:\\localpath\\examplefile.txt";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
String region = "cn-hangzhou";
// OSSClient インスタンスを作成します。
// OSSClient の使用が完了したら、shutdown メソッドを呼び出して関連リソースを解放してください。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// オブジェクトを指定されたパスにダウンロードします。同じ名前のファイルがすでに存在する場合、ダウンロードされたオブジェクトによって上書きされます。それ以外の場合、指定されたパスに保存されます。
// ダウンロードされたオブジェクトのローカルパスを指定しない場合、ダウンロードされたオブジェクトはサンプルプログラムが属するプロジェクトのパスに保存されます。
ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File(pathName));
} catch (OSSException oe) {
System.out.println("OSSException が発生しました。これは、リクエストが OSS に到達しましたが、何らかの理由でエラー応答により拒否されたことを意味します。");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("ClientException が発生しました。これは、クライアントが OSS との通信中にネットワークにアクセスできないなど、重大な内部問題に遭遇したことを意味します。");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
} const OSS = require('ali-oss');
const client = new OSS({
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを oss-cn-hangzhou に設定します。
region: 'yourRegion',
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET の環境変数が設定されていることを確認してください。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// バケット名を指定します。
bucket: 'examplebucket'
});
async function get () {
try {
// オブジェクトおよびローカルファイルの完全なパスを指定します。オブジェクトの完全なパスにはバケット名を含めないでください。
// 同じ名前のファイルがすでに存在する場合、ダウンロードされたオブジェクトによって上書きされます。それ以外の場合、ローカルファイルとして保存されます。
// ダウンロードされたオブジェクトのパスを指定しない場合、ダウンロードされたオブジェクトはサンプルプログラムが属するプロジェクトのパスに保存されます。
const result = await client.get('exampleobject.txt', 'D:\\localpath\\examplefile.txt');
console.log(result);
} catch (e) {
console.log(e);
}
}
get(); <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<!-- SDK ファイルをインポート -->
<script
type="text/javascript"
src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.18.0.min.js"
></script>
<script type="text/javascript">
const client = new OSS({
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを oss-cn-hangzhou に設定します。
region: "yourRegion",
authorizationV4: true,
// STS から取得した一時的な AccessKey ペアを指定します。AccessKey ペアは、AccessKey ID および AccessKey Secret で構成されます。
accessKeyId: "yourAccessKeyId",
accessKeySecret: "yourAccessKeySecret",
// STS から取得したセキュリティトークンを指定します。
stsToken: "yoursecurityToken",
// バケット名を指定します。
bucket: "examplebucket",
});
// URL を使用してオブジェクトを自動的にダウンロードするようにレスポンスヘッダーを設定し、オブジェクトのダウンロード後のローカルファイル名を設定します。
const filename = "examplefile.txt";
const response = {
"content-disposition": `attachment; filename=${encodeURIComponent(
filename
)}`,
};
// オブジェクトの完全なパスを指定します。バケット名はパスに含めないでください。
const url = client.signatureUrl("exampleobject.txt", { response });
console.log(url);
</script>
</body>
</html>// オブジェクトダウンロードリクエストを構築します。
// バケット名およびオブジェクトの完全なパスを指定します。この例では、バケット名は examplebucket、オブジェクトの完全なパスは exampledir/exampleobject.txt です。バケット名はパスに含めないでください。
GetObjectRequest get = new GetObjectRequest("examplebucket", "exampledir/exampleobject.txt");
oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
@Override
public void onSuccess(GetObjectRequest request, GetObjectResult result) {
// データの読み取りを開始します。
long length = result.getContentLength();
if (length > 0) {
byte[] buffer = new byte[(int) length];
int readCount = 0;
while (readCount < length) {
try{
readCount += result.getObjectContent().read(buffer, readCount, (int) length - readCount);
}catch (Exception e){
OSSLog.logInfo(e.toString());
}
}
// ダウンロードされたオブジェクトの完全なパスを指定します。例:D:\\localpath\\exampleobject.jpg。
try {
FileOutputStream fout = new FileOutputStream("download_filePath");
fout.write(buffer);
fout.close();
} catch (Exception e) {
OSSLog.logInfo(e.toString());
}
}
}
@Override
public void onFailure(GetObjectRequest request, ClientException clientException,
ServiceException serviceException) {
}
});OSSGetObjectRequest * request = [OSSGetObjectRequest new];
// バケット名を指定します。例:examplebucket。
request.bucketName = @"examplebucket";
// オブジェクトの完全なパスを指定します。例:exampledir/exampleobject.txt。バケット名はパスに含めないでください。
request.objectKey = @"exampledir/exampleobject.txt";
// オプションフィールドを設定します。
request.downloadProgress = ^(int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite) {
// ダウンロード中のバイト数、ダウンロード済みのバイト数、ダウンロードしたい合計バイト数を指定します。
NSLog(@"%lld, %lld, %lld", bytesWritten, totalBytesWritten, totalBytesExpectedToWrite);
};
// request.range = [[OSSRange alloc] initWithStart:0 withEnd:99]; // bytes=0-99。ダウンロード範囲をバイト 0 からバイト 99 に指定します。
// request.downloadToFileURL = [NSURL fileURLWithPath:@"<filepath>"]; // オブジェクトを直接ファイルにダウンロードする必要がある場合、ファイルのパスを指定します。
OSSTask * getTask = [client getObject:request];
[getTask continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
NSLog(@"download object success!");
OSSGetObjectResult * getResult = task.result;
NSLog(@"download result: %@", getResult.downloadedData);
} else {
NSLog(@"download object failed, error: %@" ,task.error);
}
return nil;
}];
// [getTask waitUntilFinished];
// [request cancel];#include <alibabacloud/oss/OssClient.h>
#include <memory>
#include <fstream>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* OSS にアクセスするために使用するアカウントに関する情報を初期化します。 */
/* バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
std::string Endpoint = "yourEndpoint";
/* バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。 */
std::string Region = "yourRegion";
/* バケット名を指定します。例:examplebucket。 */
std::string BucketName = "examplebucket";
/* オブジェクトの完全なパスを指定します。バケット名はパスに含めないでください。例:exampledir/exampleobject.txt。 */
std::string ObjectName = "exampledir/exampleobject.txt";
/* examplefile.txt という名前のローカルファイルとしてオブジェクトをダウンロードし、D:\\localpath に保存します。指定されたパスに同じ名前のファイルがすでに存在する場合、ダウンロードされたオブジェクトによって上書きされます。それ以外の場合、指定されたパスに保存されます。 */
/* ローカルファイルのパスを指定しない場合、ダウンロードされたオブジェクトはサンプルプログラムが属するプロジェクトのパスに保存されます。 */
std::string FileNametoSave = "D:\\localpath\\examplefile.txt";
/* ネットワークリソースなどのリソースを初期化します。 */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET の環境変数が設定されていることを確認してください。 */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* オブジェクトをローカルファイルとしてダウンロードします。 */
GetObjectRequest request(BucketName, ObjectName);
request.setResponseStreamFactory([=]() {return std::make_shared<std::fstream>(FileNametoSave, std::ios_base::out | std::ios_base::in | std::ios_base::trunc| std::ios_base::binary); });
auto outcome = client.GetObject(request);
if (outcome.isSuccess()) {
std::cout << "GetObjectToFile success" << outcome.result().Metadata().ContentLength() << std::endl;
}
else {
/* 例外を処理します。 */
std::cout << "GetObjectToFile fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* ネットワークリソースなどのリソースを解放します。 */
ShutdownSdk();
return 0;
}#include "oss_api.h"
#include "aos_http_io.h"
/* バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
const char *endpoint = "yourEndpoint";
/* バケット名を指定します。例:examplebucket。 */
const char *bucket_name = "examplebucket";
/* オブジェクトの完全なパスを指定します。バケット名はパスに含めないでください。例:exampledir/exampleobject.txt。 */
const char *object_name = "exampledir/exampleobject.txt";
/* ローカルファイルの完全なパスを指定します。 */
const char *local_filename = "yourLocalFilename";
/* バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。 */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* char* 文字列を使用して aos_string_t 型のデータを初期化します。 */
aos_str_set(&options->config->endpoint, endpoint);
/* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET の環境変数が設定されていることを確認してください。 */
aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
// 追加の 2 つのパラメーターを指定します。
aos_str_set(&options->config->region, region);
options->config->signature_version = 4;
/* CNAME を使用するかどうかを指定します。値 0 は CNAME を使用しないことを示します。 */
options->config->is_cname = 0;
/* タイムアウト期間などのネットワークパラメーターを指定します。 */
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
/* main() で aos_http_io_initialize メソッドを呼び出して、ネットワークリソースやメモリリソースなどのグローバルリソースを初期化します。 */
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* メモリを管理するためのメモリプールを作成します。aos_pool_t は apr_pool_t と同等です。メモリプールを作成するコードは APR ライブラリに含まれています。 */
aos_pool_t *pool;
/* メモリプールを作成します。2 番目のパラメーターは NULL です。この値は、プールが他のメモリプールを継承しないことを示します。 */
aos_pool_create(&pool, NULL);
/* グローバル設定情報(エンドポイント、access_key_id、access_key_secret、is_cname、curl など)を含むオプションを作成および初期化します。 */
oss_request_options_t *oss_client_options;
/* メモリプール内のメモリリソースをオプションに割り当てます。 */
oss_client_options = oss_request_options_create(pool);
/* oss_client_options を初期化します。 */
init_options(oss_client_options);
/* パラメーターを初期化します。 */
aos_string_t bucket;
aos_string_t object;
aos_string_t file;
aos_table_t *params;
aos_table_t *headers = NULL;
aos_table_t *resp_headers = NULL;
aos_status_t *resp_status = NULL;
aos_str_set(&bucket, bucket_name);
aos_str_set(&object, object_name);
aos_str_set(&file, local_filename);
params = aos_table_make(pool, 0);
/* オブジェクトをローカルファイルにダウンロードします。同じ名前のファイルがすでに存在する場合、ダウンロードされたオブジェクトによって上書きされます。それ以外の場合、新しいファイルが作成されます。 */
resp_status = oss_get_object_to_file(oss_client_options, &bucket, &object, headers, params, &file, &resp_headers);
if (aos_status_is_ok(resp_status)) {
printf("Get object from file succeeded\n");
} else {
printf("Get object from file failed\n");
}
/* メモリプールを解放します。この操作により、リクエストのために割り当てられたメモリリソースが解放されます。 */
aos_pool_destroy(pool);
/* 割り当てられたグローバルリソースを解放します。 */
aos_http_io_deinitialize();
return 0;
}require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
# この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
# 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET の環境変数が設定されていることを確認してください。
access_key_id: ENV['OSS_ACCESS_KEY_ID'],
access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# バケット名を指定します。例:examplebucket。
bucket = client.get_bucket('examplebucket')
# オブジェクトをローカルコンピューターにダウンロードします。
bucket.get_object('exampleobject.txt', :file => 'D:\\localpath\\examplefile.txt')package main
import (
"context"
"flag"
"log"
"net/http"
"time"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // バケットが配置されているリージョン。
bucketName string // バケット名。
objectName string // オブジェクト名。
)
// init 関数を使用してパラメーターを初期化します。
func init() {
flag.StringVar(®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)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// ローカルファイルのパスを指定します。
localFile := "download.file"
// たとえば、オブジェクトの最終更新時刻が 2023 年 11 月 21 日 18:43:02 だったとします。IfModifiedSince 条件で指定された時刻が最終更新時刻より前の場合、オブジェクトがダウンロードされます。
date := time.Date(2024, time.October, 21, 18, 43, 2, 0, time.UTC)
// オブジェクトの ETag が e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 であると仮定します。IfMatch 条件で指定された ETag がオブジェクトの ETag と一致する場合、オブジェクトがダウンロードされます。
etag := "\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\""
// オブジェクトをダウンロードするリクエストを作成します。
getRequest := &oss.GetObjectRequest{
Bucket: oss.Ptr(bucketName), // バケット名。
Key: oss.Ptr(objectName), // オブジェクト名。
IfModifiedSince: oss.Ptr(date.Format(http.TimeFormat)), // IfModifiedSince 条件を指定します。
IfMatch: oss.Ptr(etag), // IfMatch 条件を指定します。
}
// オブジェクトをローカルデバイスにダウンロードし、結果を処理します。
result, err := client.GetObjectToFile(context.TODO(), getRequest, localFile)
if err != nil {
log.Fatalf("オブジェクトをファイルに取得できませんでした。%v", err)
}
log.Printf("オブジェクトをファイルに取得した結果:%#v\n", result)
}
import argparse
import alibabacloud_oss_v2 as oss
import os
# コマンドライン引数パーサを作成します。
parser = argparse.ArgumentParser(description="get object sample")
# --region コマンドライン引数を追加して、バケットが配置されているリージョンを指定します。この引数は必須です。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
# --bucket コマンドライン引数を追加して、バケット名を指定します。この引数は必須です。
parser.add_argument('--bucket', help='バケット名。', required=True)
# --endpoint コマンドライン引数を追加して、他のサービスが OSS にアクセスするために使用できるドメイン名を指定します。この引数は任意です。
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名。')
# --key コマンドライン引数を追加して、オブジェクト名を指定します。この引数は必須です。
parser.add_argument('--key', help='オブジェクト名。', required=True)
def main():
# コマンドライン引数を解析します。
args = parser.parse_args()
# 本人確認のために環境変数から認証情報をロードします。
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# SDK のデフォルト設定をロードし、認証情報プロバイダーを設定します。
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
# 設定にリージョンを設定します。
cfg.region = args.region
# エンドポイントが提供されている場合、設定にエンドポイントを設定します。
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# 設定された情報を使用して OSS クライアントを作成します。
client = oss.Client(cfg)
# オブジェクトを取得するリクエストを実行します。バケット名およびオブジェクト名を指定します。
result = client.get_object(oss.GetObjectRequest(
bucket=args.bucket, # バケット名を指定します。
key=args.key, # オブジェクトキーを指定します。
))
# オブジェクトの取得結果を出力して、リクエストが成功したかどうかを確認します。
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
f' content length: {result.content_length},'
f' content range: {result.content_range},'
f' content type: {result.content_type},'
f' etag: {result.etag},'
f' last modified: {result.last_modified},'
f' content md5: {result.content_md5},'
f' cache control: {result.cache_control},'
f' content disposition: {result.content_disposition},'
f' content encoding: {result.content_encoding},'
f' expires: {result.expires},'
f' hash crc64: {result.hash_crc64},'
f' storage class: {result.storage_class},'
f' object type: {result.object_type},'
f' version id: {result.version_id},'
f' tagging count: {result.tagging_count},'
f' server side encryption: {result.server_side_encryption},'
f' server side data encryption: {result.server_side_data_encryption},'
f' next append position: {result.next_append_position},'
f' expiration: {result.expiration},'
f' restore: {result.restore},'
f' process status: {result.process_status},'
f' delete marker: {result.delete_marker},'
)
# ========== 方法 1:オブジェクト全体を読み取り ==========
with result.body as body_stream:
data = body_stream.read()
print(f"ファイルが読み取られました。データ長: {len(data)} バイト")
path = "./get-object-sample.txt"
with open(path, 'wb') as f:
f.write(data)
print(f"ファイルがダウンロードされ、次のパスに保存されました: {path}")
# # ========== 方法 2:チャンク単位で読み取り ==========
# with result.body as body_stream:
# chunk_path = "./get-object-sample-chunks.txt"
# total_size = 0
# with open(chunk_path, 'wb') as f:
# # 256 KB のブロックサイズを使用します。必要に応じて block_size パラメーターを変更できます。
# for chunk in body_stream.iter_bytes(block_size=256 * 1024):
# f.write(chunk)
# total_size += len(chunk)
# print(f"データブロックを受信: {len(chunk)} バイト | 合計: {total_size} バイト")
# print(f"ファイルがダウンロードされ、次のパスに保存されました: {chunk_path}")
# このスクリプトを直接実行すると、main 関数が呼び出されます。
if __name__ == "__main__":
main() # スクリプトのエントリーポイント。ファイルを直接実行すると、main 関数が呼び出されます。<?php
// 依存ライブラリが正しくロードされるように、オートローダーファイルをインポートします。
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// コマンドラインパラメーターの説明を定義します。
$optsdesc = [
"region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // バケットが配置されているリージョン。(必須)
"endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // エンドポイント。(任意)
"bucket" => ['help' => 'バケット名', 'required' => True], // バケット名。(必須)
"key" => ['help' => 'オブジェクト名', 'required' => True], // オブジェクト名。(必須)
];
// パラメーターの説明を getopt で必要なロングオプション形式に変換します。
// 各パラメーターの後にコロン ":" を付けることで、パラメーターに値が必要であることを示します。
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// コマンドラインパラメーターを解析します。
$options = getopt("", $longopts);
// 必須パラメーターが存在するかどうかを確認します。
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help']; // パラメーターのヘルプ情報を取得します。
echo "エラー: 次の引数が必要です: --$key, $help" . PHP_EOL;
exit(1); // 必須パラメーターが不足している場合、プログラムを終了します。
}
}
// 解析されたパラメーターから値を抽出します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケット名。
$key = $options["key"]; // オブジェクト名。
// 環境変数から認証情報をロードします。
// EnvironmentVariableCredentialsProvider を使用して、環境変数から Access Key ID および Access Key Secret を読み取ります。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// SDK のデフォルト設定を使用します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証情報プロバイダーを設定します。
$cfg->setRegion($region); // バケットが配置されているリージョンを設定します。
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]); // エンドポイントが提供されている場合、エンドポイントを設定します。
}
// OSS クライアントインスタンスを作成します。
$client = new Oss\Client($cfg);
// 指定されたオブジェクトのコンテンツを取得する GetObjectRequest オブジェクトを作成します。
$request = new Oss\Models\GetObjectRequest(bucket: $bucket, key: $key);
// オブジェクト取得操作を実行します。
$result = $client->getObject($request);
// 保存するローカルファイルのパスを定義します。
$localFilePath = 'path/to/local/file.txt'; // 実際のファイルパスに置き換えてください。
// コンテンツをローカルファイルに書き込みます。
file_put_contents( $localFilePath, $result->body->getContents());
// 結果を出力します。
// HTTP ステータスコード、リクエスト ID、およびオブジェクトのコンテンツを出力します。
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。例:200 はリクエストが成功したことを示します。
'request id:' . $result->requestId . PHP_EOL // リクエスト ID。デバッグまたはリクエストの追跡に使用されます。
);
ossutil CLI
コマンドラインツール ossutil を使用してオブジェクトをダウンロードできます。ossutil のインストール方法については、「ossutil のインストール」をご参照ください。
次のコマンドは、exampleobject オブジェクトを examplebucket バケットからダウンロードします。
ossutil api get-object --bucket examplebucket --key exampleobject
このコマンドの詳細については、「get-object」をご参照ください。
API リファレンス
本トピックで説明する方法は、GetObject API オペレーションに基づいて実装されています。さらにカスタマイズが必要な場合は、署名を手動で計算して GetObject REST API オペレーションを直接呼び出すことができます。詳細については、「GetObject」をご参照ください。
権限
デフォルトでは、Alibaba Cloud アカウント (root ユーザー) はすべての権限を持ちますが、Alibaba Cloud アカウント配下の RAM ユーザーまたは RAM ロールにはデフォルトで権限がありません。Alibaba Cloud アカウントまたはアカウント管理者は、RAM ポリシー または バケットポリシー を通じて操作権限を付与する必要があります。
|
API |
アクション |
説明 |
|
GetObject |
|
オブジェクトをダウンロードします。 |
|
|
オブジェクトをダウンロードする際に、versionId を通じてオブジェクトのバージョンを指定する場合、この権限が必要です。 |
|
|
|
オブジェクトをダウンロードする際に、オブジェクトのメタデータに X-Oss-Server-Side-Encryption: KMS が含まれている場合、この権限が必要です。 |
課金
シンプルダウンロードには以下の課金項目が適用されます。課金項目の単位価格の詳細については、「Object Storage Service の料金」「」をご参照ください。
|
API |
課金項目 |
説明 |
|
GetObject |
GET リクエスト |
成功したリクエストの数に基づいて、リクエスト料金が発生します。 |
|
インターネット経由のアウトバウンドトラフィック |
oss-cn-hangzhou.aliyuncs.com などのパブリックエンドポイント、または oss-accelerate.aliyuncs.com などのアクセラレーションエンドポイントを使用して GetObject オペレーションを呼び出す場合、データサイズに基づいてインターネット経由のアウトバウンドトラフィック料金が発生します。 |
|
|
IA オブジェクトの取得 |
IA オブジェクトを取得する場合、取得された IA データのサイズに基づいて IA データ取得料金が発生します。 |
|
|
リアルタイムアクセスが有効なバケット内のアーカイブオブジェクトの取得 |
リアルタイムアクセスが有効なバケット内のアーカイブオブジェクトを取得する場合、取得されたアーカイブオブジェクトのサイズに基づいてアーカイブデータ取得料金が発生します。 |
|
|
転送アクセラレーション料金 |
転送アクセラレーションを有効にしてアクセラレーションエンドポイントを使用してバケットにアクセスする場合、データサイズに基づいて転送アクセラレーション料金が発生します。 |
参考資料
-
バージョン管理が有効なバケットからオブジェクトをダウンロードする方法については、「バージョン管理が有効なバケットでのオブジェクト管理」をご参照ください。
-
バージョン管理が一時停止されたバケットからオブジェクトをダウンロードする方法については、「バージョン管理が一時停止されたバケットでのオブジェクト管理」をご参照ください。
-
バケットへの不正アクセスやデータダウンロードを防止するために、OSS はバケットおよびオブジェクトレベルでのアクセスの制御を提供しています。詳細については、「アクセスの制御概要」をご参照ください。
-
ラージオブジェクトの中断されたダウンロードを再開するには、再開可能なダウンロードを使用します。詳細については、「再開可能なダウンロード」をご参照ください。
-
第三者に非公開バケットからのオブジェクトダウンロードを許可するには、STS 一時アクセス認証情報または署名付き URL を使用します。詳細については、「第三者へのオブジェクトダウンロードの許可」をご参照ください。
-
特定の条件が満たされた場合にのみオブジェクトをダウンロードするには、条件付きダウンロードを使用します。詳細については、「条件付きダウンロード」をご参照ください。