ネットワークが不安定な場合やプログラムの例外が発生した場合、サイズが 5 GB を超えるラージオブジェクトは Object Storage Service (OSS) へのアップロードに失敗します。 場合によっては、数回試行してもオブジェクトのアップロードに失敗することがあります。 この場合、再開可能なアップロードを実行してラージオブジェクトをアップロードできます。 オブジェクトを複数のパートに分割し、パートを並行してアップロードして、アップロードを高速化できます。 再開可能なアップロード中、アップロードの進行状況はチェックポイントファイルに記録されます。 パートのアップロードに失敗した場合、次のアップロードはチェックポイントファイルに記録された位置から開始されます。 すべてのパートがアップロードされると、すべてのパートが結合されて完全なオブジェクトになります。
前提条件
バケットが作成されていること。 詳細については、「バケットの作成」をご参照ください。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスするには、内部エンドポイントを使用します。 サポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
再開可能なアップロードを使用するには、
oss:PutObject権限が必要です。 詳細については、「RAM ユーザーへのカスタムポリシーのアタッチ」をご参照ください。アップロードの進行状況はチェックポイントファイルに記録されます。 チェックポイントファイルに対する書き込み権限があることを確認してください。
チェックポイントファイルにはチェックサムが含まれています。 このチェックサムは変更できません。 チェックポイントファイルが破損している場合は、オブジェクトのすべてのパートを再アップロードする必要があります。
アップロード中にローカルファイルが変更された場合は、オブジェクトのすべてのパートを再アップロードする必要があります。
OSS SDK の使用
次のサンプルコードは、一般的なプログラミング言語用の OSS SDK を使用して再開可能なアップロードを実行する方法の例を示しています。 他のプログラミング言語用の OSS SDK を使用して再開可能なアップロードを実行する方法の詳細については、「概要」をご参照ください。
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
public class UploadFile {
public static void main(String[] args) throws Exception {
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
String region = "cn-hangzhou";
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 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 {
ObjectMetadata meta = new ObjectMetadata();
// アップロードするコンテンツのタイプを指定します。
// meta.setContentType("text/plain");
// アップロードするオブジェクトのアクセス制御リスト (ACL) を指定します。
// meta.setObjectAcl(CannedAccessControlList.Private);
// UploadFileRequest を使用して複数のパラメーターを設定します。
// examplebucket などのバケットの名前と、exampledir/exampleobject.txt などのオブジェクトの完全なパスを指定します。 完全なパスにバケット名を含めないでください。
UploadFileRequest uploadFileRequest = new UploadFileRequest("examplebucket","exampledir/exampleobject.txt");
// UploadFileRequest を使用して単一のパラメーターを設定します。
// アップロードするローカルファイルの完全なパスを指定します。 例: D:\\localpath\\examplefile.txt。 デフォルトでは、ローカルファイルの完全なパスを指定しない場合、ローカルファイルはサンプルプログラムが属するプロジェクトのパスからアップロードされます。
uploadFileRequest.setUploadFile("D:\\localpath\\examplefile.txt");
// アップロードタスクの同時スレッド数を指定します。 デフォルト値: 1。
uploadFileRequest.setTaskNum(5);
// パートサイズを指定します。 単位: バイト。 有効な値: 100 KB~5 GB。 デフォルト値: 100 KB。
uploadFileRequest.setPartSize(1 * 1024 * 1024);
// 再開可能なアップロードを有効にするかどうかを指定します。 デフォルトでは、再開可能なアップロードは無効になっています。
uploadFileRequest.setEnableCheckpoint(true);
// 各パートのアップロードの進行状況を記録するチェックポイントファイルを指定します。 このチェックポイントファイルには、アップロードの進行状況に関する情報が保存されます。 パートのアップロードに失敗した場合、チェックポイントファイルに記録された進行状況に基づいてタスクを続行できます。 ローカルファイルが OSS にアップロードされると、チェックポイントファイルは削除されます。
// デフォルトでは、このパラメーターを指定しない場合、チェックポイントファイルはアップロードするローカルファイルと同じディレクトリに保存されます。 ディレクトリ名は ${uploadFile}.ucp です。
uploadFileRequest.setCheckpointFile("yourCheckpointFile");
// オブジェクトのメタデータを設定します。
uploadFileRequest.setObjectMetadata(meta);
// アップロードコールバックを設定します。 パラメーターのタイプは Callback です。
//uploadFileRequest.setCallback("yourCallbackEvent");
// 再開可能なアップロードを開始します。
ossClient.uploadFile(uploadFileRequest);
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (Throwable ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
// OSSClient インスタンスをシャットダウンします。
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',
});
// アップロードされたファイルのローカルパスを指定します。
const filePath = "yourfilepath";
let checkpoint;
async function resumeUpload() {
// アップロードのリトライ操作の回数を 5 に設定します。
for (let i = 0; i < 5; i++) {
try {
const result = await client.multipartUpload('object-name', filePath, {
checkpoint,
async progress(percentage, cpt) {
checkpoint = cpt;
},
});
console.log(result);
break; // ループを中断します。
} catch (e) {
console.log(e);
}
}
}
resumeUpload();using Aliyun.OSS;
using Aliyun.OSS.Common;
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
var endpoint = "yourEndpoint";
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケットの名前を指定します。 例: examplebucket。
var bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。 完全なパスにバケット名を含めないでください。 例: exampledir/exampleobject.txt。
var objectName = "exampledir/exampleobject.txt";
// アップロードするローカルファイルの完全なパスを指定します。 例: D:\\localpath\\examplefile.txt。
// デフォルトでは、ローカルパスを指定せずに examplefile.txt などのローカルファイルの名前のみを指定した場合、ローカルファイルはサンプルプログラムが属するプロジェクトのパスからアップロードされます。
var localFilename = "D:\\localpath\\examplefile.txt";
// チェックポイントファイルを指定します。 チェックポイントファイルには、アップロードの進行状況に関する情報が保存されます。
string checkpointDir = "yourCheckpointDir";
// バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
const string region = "cn-hangzhou";
// ClientConfiguration インスタンスを作成し、要件に基づいてデフォルトのパラメーターを変更します。
var conf = new ClientConfiguration();
// 署名アルゴリズム V4 を使用します。
conf.SignatureVersion = SignatureVersion.V4;
// OSSClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
// UploadFileRequest を使用してパラメーターを設定します。
UploadObjectRequest request = new UploadObjectRequest(bucketName, objectName, localFilename)
{
// 各パートのサイズを指定します。
PartSize = 8 * 1024 * 1024,
// 同時スレッド数を指定します。
ParallelThreadCount = 3,
// checkpointDir パラメーターを指定して、再開可能なアップロードタスクの状態を保存します。これは、アップロードタスクが失敗した場合にアップロードタスクを再開するために使用されます。
// checkpointDir を null に設定した場合、再開可能なアップロードは有効にならず、オブジェクトのアップロードに失敗した場合はオブジェクトが再アップロードされます。
CheckpointDir = checkpointDir,
};
// 再開可能なアップロードを開始します。
client.ResumableUploadObject(request);
Console.WriteLine("Resumable upload object:{0} succeeded", objectName);
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}// アップロード ID を取得してオブジェクトをアップロードします。
OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];
resumableUpload.bucketName = <bucketName>;
// objectKey は objectName と同等で、再開可能なアップロードを使用して OSS にアップロードするオブジェクトの完全なパスを示します。 パスにはオブジェクト名の拡張子を含める必要があります。 たとえば、objectKey を abc/efg/123.jpg に設定できます。
resumableUpload.objectKey = <objectKey>;
resumableUpload.partSize = 1024 * 1024;
resumableUpload.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
};
NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
// チェックポイントファイルを保存するパスを指定します。
resumableUpload.recordDirectoryPath = cachesDir;
// deleteUploadIdOnCancelling パラメーターを NO に設定します。 NO は、アップロードタスクが失敗してもチェックポイントファイルが削除されないことを示します。 次のアップロードは、オブジェクト全体がアップロードされるまで、チェックポイントファイルに記録された位置から開始されます。 このパラメーターを指定しない場合、デフォルト値の YES が使用されます。 YES は、アップロードタスクが失敗するとチェックポイントファイルが削除されることを示します。 次のアップロード中にオブジェクト全体が再度アップロードされます。
resumableUpload.deleteUploadIdOnCancelling = NO;
resumableUpload.uploadingFileURL = [NSURL fileURLWithPath:<your file path>];
OSSTask * resumeTask = [client resumableUpload:resumableUpload];
[resumeTask continueWithBlock:^id(OSSTask *task) {
if (task.error) {
NSLog(@"error: %@", task.error);
if ([task.error.domain isEqualToString:OSSClientErrorDomain] && task.error.code == OSSClientErrorCodeCannotResumeUpload) {
// タスクを再開できません。 新しいアップロード ID を取得してオブジェクトをアップロードする必要があります。
}
} else {
NSLog(@"Upload file success");
}
return nil;
}];
// [resumeTask waitUntilFinished];
// [resumableUpload cancel];
#include <alibabacloud/oss/OssClient.h>
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";
/* ローカルファイルの完全なパスを指定します。 例: D:\\localpath\\examplefile.txt。 デフォルトでは、ローカルファイルの完全なパスを指定しない場合、ローカルファイルはサンプルプログラムが属するプロジェクトのパスからアップロードされます。 */
std::string UploadFilePath = "D:\\localpath\\examplefile.txt";
/* チェックポイントファイルを指定します。 アップロードの進行状況に関する情報はこのファイルに保存されます。 パートのアップロードに失敗した場合、ファイルに記録された位置からアップロードが続行されます。 ローカルファイルがアップロードされると、チェックポイントファイルは削除されます。 */
/* チェックポイントファイルを保存するディレクトリを指定し、指定したディレクトリ (D:\\local など) が存在することを確認します。 このパラメーターを指定しない場合、再開可能なアップロードは使用されず、情報は記録されません。 */
std::string CheckpointFilePath = "D:\\local";
/* ネットワークリソースなどのリソースを初期化します。 */
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);
/* 再開可能なアップロードを開始します。 */
UploadObjectRequest request(BucketName, ObjectName, UploadFilePath, CheckpointFilePath);
auto outcome = client.ResumableUploadObject(request);
if (!outcome.isSuccess()) {
/* 例外を処理します。 */
std::cout << "ResumableUploadObject 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);
/* オプションを作成して初期化します。 このパラメーターには、endpoint、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_list_t resp_body;
aos_table_t *headers = NULL;
aos_table_t *resp_headers = NULL;
aos_status_t *resp_status = NULL;
oss_resumable_clt_params_t *clt_params;
aos_str_set(&bucket, bucket_name);
aos_str_set(&object, object_name);
aos_str_set(&file, local_filename);
aos_list_init(&resp_body);
/* 再開可能なアップロードを開始します。 */
clt_params = oss_create_resumable_clt_params_content(pool, 1024 * 100, 3, AOS_TRUE, NULL);
resp_status = oss_resumable_upload_file(oss_client_options, &bucket, &object, &file, headers, NULL, clt_params, NULL, &resp_headers, &resp_body);
if (aos_status_is_ok(resp_status)) {
printf("resumable upload succeeded\n");
} else {
printf("resumable upload failed\n");
}
/* メモリプールを解放します。 この操作により、リクエストに割り当てられたメモリリソースが解放されます。 */
aos_pool_destroy(pool);
/* 割り当てられたグローバルリソースを解放します。 */
aos_http_io_deinitialize();
return 0;
}import argparse
import alibabacloud_oss_v2 as oss
# コマンドライン引数パーサーを作成し、スクリプトの目的を記述します: ファイルのアップロードサンプル
parser = argparse.ArgumentParser(description="upload file sample")
# バケットが配置されているリージョンを指定する --region コマンドライン引数を追加します。 これは必須パラメーターです。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# ファイルのアップロード先となるバケットの名前を指定する --bucket コマンドライン引数を追加します。 これは必須パラメーターです。
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# 他のサービスが OSS へのアクセスに使用できるドメイン名を指定する --endpoint コマンドライン引数を追加します。 これはオプションのパラメーターです。
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
# OSS 内のオブジェクト (ファイル) のキーを指定する --key コマンドライン引数を追加します。 これは必須パラメーターです。
parser.add_argument('--key', help='The name of the object.', required=True)
# アップロードするローカルファイルのパスを指定する --file_path コマンドライン引数を追加します。 これは必須パラメーターです。例: "/Users/yourLocalPath/yourFileName"。
parser.add_argument('--file_path', help='The path of Upload file.', required=True)
def main():
# コマンドライン引数を解析して、ユーザーが指定した値を取得します。
args = parser.parse_args()
# ID 検証のために、OSS へのアクセスに必要な認証情報を環境変数から読み込みます。
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# SDK のデフォルト設定を使用して設定オブジェクトを作成し、資格情報プロバイダーを設定します。
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
# ユーザーが指定したコマンドライン引数に基づいて、設定オブジェクトのリージョンプロパティを設定します。
cfg.region = args.region
# カスタムエンドポイントが指定されている場合は、設定オブジェクトのエンドポイントプロパティを更新します。
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# 前述の設定を使用して OSS クライアントを初期化し、OSS との対話の準備をします。
client = oss.Client(cfg)
# ファイルをアップロードするためのオブジェクトを作成し、再開可能なアップロードを有効にして、ブレークポイントレコードファイルを保存するパスを指定します。
uploader = client.uploader(enable_checkpoint=True, checkpoint_dir="/Users/yourLocalPath/checkpoint/")
# メソッドを呼び出してファイルアップロード操作を実行します。
result = uploader.upload_file(
oss.PutObjectRequest(
bucket=args.bucket, # 宛先バケットを指定します。
key=args.key, # OSS 内のファイルの名前を指定します。
),
filepath=args.file_path # ローカルファイルの場所を指定します。
)
# ステータスコード、リクエスト ID、Content-MD5 など、アップロード結果に関する情報を出力します。
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
f' content md5: {result.headers.get("Content-MD5")},'
f' etag: {result.etag},'
f' hash crc64: {result.hash_crc64},'
f' version id: {result.version_id},'
f' server time: {result.headers.get("x-oss-server-time")},'
)
# このスクリプトが直接実行される場合は、main 関数を呼び出して処理ロジックを開始します。
if __name__ == "__main__":
main() # スクリプトのエントリポイント。 プログラムフローはここから始まります。<?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], // エンドポイント (オプション)。
"bucket" => ['help' => 'The name of the bucket', 'required' => True], // バケットの名前 (必須)。
"key" => ['help' => 'The name of the object', 'required' => True], // オブジェクトの名前 (必須)。
];
// パラメーターの説明を getopt で必要なロングオプション形式に変換します。
// 各パラメーターの後にコロン ":" を追加して、パラメーターに値が必要であることを示します。
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// コマンドライン引数を解析します。
$options = getopt("", $longopts);
// 必須パラメーターが存在することを確認します。
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help']; // パラメーターのヘルプ情報を取得します。
echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
exit(1); // 必須パラメーターがない場合は、プログラムを終了します。
}
}
// 解析されたパラメーターから値を抽出します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。
$key = $options["key"]; // オブジェクトの名前。
// 環境変数からアクセス資格情報を読み込みます。
// EnvironmentVariableCredentialsProvider を使用して、環境変数からアクセスキー ID とアクセスキーシークレットを読み取ります。
$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);
// アップロードするローカルファイルのパスを定義します。
$filename = "/Users/yourLocalPath/yourFileName"; // ファイルパスの例。
// アップローダーインスタンスを作成します。
$uploader = $client->newUploader();
// マルチパートアップロード操作を実行します。
$result = $uploader->uploadFile(
request: new Oss\Models\PutObjectRequest(bucket: $bucket, key: $key), // PutObjectRequest オブジェクトを作成し、バケットとオブジェクトの名前を指定します。
filepath: $filename, // アップロードするローカルファイルのパスを指定します。
);
// マルチパートアップロードの結果を出力します。
printf(
'multipart upload status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。 たとえば、200 は成功を示します。
'multipart upload request id:' . $result->requestId . PHP_EOL . // リクエストのデバッグまたは追跡に使用されるリクエスト ID。
'multipart upload result:' . var_export($result, true) . PHP_EOL // マルチパートアップロードの詳細な結果。
);
package main
import (
"context"
"flag"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// グローバル変数を定義します。
var (
region string // ストレージリージョン。
bucketName string // バケット名。
objectName string // オブジェクト名。
)
// init 関数は、コマンドラインパラメーターを初期化するために使用されます。
func init() {
flag.StringVar(®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 source 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, source object name required")
}
// デフォルトの設定を読み込み、資格情報プロバイダーとリージョンを設定します。
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// OSS クライアントを作成します。
client := oss.NewClient(cfg)
// アップローダーを作成します。
u := client.NewUploader()
// ローカルファイルのパスを定義します。 パスを実際のローカルファイルのパスとファイル名に置き換える必要があります。
localFile := "/Users/yourLocalPath/yourFileName"
// ファイルをアップロードします。
result, err := u.UploadFile(context.TODO(),
&oss.PutObjectRequest{
Bucket: oss.Ptr(bucketName),
Key: oss.Ptr(objectName)},
localFile)
if err != nil {
log.Fatalf("failed to upload file %v", err)
}
// アップロード結果を出力します。
log.Printf("upload file result:%#v\n", result)
}