ネットワークが不安定な場合、またはプログラム例外が発生した場合、5 GB を超える大きなオブジェクトは Object Storage Service (OSS) へのアップロードに失敗します。場合によっては、数回試行してもオブジェクトのアップロードに失敗することがあります。このような場合は、再開可能なアップロードを実行することで、大きなオブジェクトをアップロードできます。オブジェクトを複数の部分に分割し、それらの部分を並行してアップロードすることで、アップロードを高速化できます。再開可能なアップロード中は、アップロードの進捗状況がチェックポイントファイルに記録されます。いずれかの部分のアップロードに失敗した場合、次のアップロードはチェックポイントファイルに記録されている位置から開始されます。すべての部分がアップロードされると、すべての部分が結合されて完全なオブジェクトになります。
前提条件
バケットが作成されていること。詳細については、「バケットを作成する」をご参照ください。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用しています。OSS と同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用します。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
再開可能なアップロードを使用するには、
oss:PutObject
権限が必要です。詳細については、「RAM ユーザーにカスタムポリシーをアタッチする」をご参照ください。アップロードの進捗状況はチェックポイントファイルに記録されます。チェックポイントファイルへの書き込み権限があることを確認してください。
チェックポイントファイルにはチェックサムが含まれています。このチェックサムは変更できません。チェックポイントファイルが破損している場合は、オブジェクトのすべての部分を再アップロードする必要があります。
アップロード中にローカルファイルが変更された場合は、オブジェクトのすべての部分を再アップロードする必要があります。
OSS SDK の使用
次のサンプルコードは、一般的なプログラミング言語の OSS SDK を使用して再開可能なアップロードを実行する方法の例を示しています。他のプログラミング言語の OSS SDK を使用して再開可能なアップロードを実行する方法の詳細については、「概要」をご参照ください。
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.model.*;
public class Demo {
public static void main(String[] args) {
// この例では、中国 (杭州) リージョンのエンドポイントを使用しています。実際のエンドポイントを指定してください。
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 インスタンスを作成します。
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();
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントにマップするリージョンの ID を指定します。例: cn-hangzhou。署名アルゴリズム V4 を使用する場合は、このパラメータが必要です。
region = "cn-hangzhou"
# バケットの名前を指定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# オブジェクトの完全なパスを指定します。完全なパスにはバケット名を含めないでください。例: exampledir/exampleobject.txt。
# ローカルファイルの完全なパスを指定します。例: D:\\localpath\\examplefile.txt。デフォルトでは、ローカルファイルの完全なパスを指定しない場合、ローカルファイルはサンプルプログラムが属するプロジェクトのパスからアップロードされます。
oss2.resumable_upload(bucket, 'exampledir/exampleobject.txt', 'D:\\localpath\\examplefile.txt')
# store パラメータを使用してディレクトリを指定しない場合、チェックポイント情報を格納するために HOME ディレクトリに .py-oss-upload ディレクトリが作成されます。
# OSS SDK for Python 2.1.0 以降では、再開可能なアップロードでオプションパラメータの構成がサポートされています。次のコードは、再開可能なアップロードでオプションパラメータを構成する方法の例を示しています。
# import sys
# # アップロードするデータの長さを特定できない場合、total_bytes の値は None です。
# def percentage(consumed_bytes, total_bytes):
# if total_bytes:
# rate = int(100 * (float(consumed_bytes) / float(total_bytes)))
# print('\r{0}% '.format(rate), end='')
# sys.stdout.flush()
# # store パラメータを使用してディレクトリを指定すると、チェックポイント情報は指定されたディレクトリに格納されます。num_threads パラメータを使用して同時アップロードスレッド数を指定する場合は、oss2.defaults.connection_pool_size の値が同時アップロードスレッド数以上であることを確認してください。同時アップロードスレッドのデフォルト数は 1 です。
# oss2.resumable_upload(bucket, '<yourObjectName>', '<yourLocalFile>',
# store=oss2.ResumableStore(root='/tmp'),
# # オブジェクトサイズが multipart_threshold の値以上の場合にマルチパートアップロードが使用されるように指定します。multipart_threshold のデフォルト値は 10 MB です。
# multipart_threshold=100*1024,
# # 各パートのサイズを指定します。単位: バイト。有効な値: 100 KB ~ 5 GB。デフォルト値: 100 KB。
# part_size=100*1024,
# # アップロードコールバックを実装することにより、再開可能なアップロードタスクの進捗状況を示すために使用される関数を構成します。
# progress_callback=percentage,
# # num_threads パラメータを使用して同時アップロードスレッド数を指定する場合は、oss2.defaults.connection_pool_size の値が同時アップロードスレッド数以上であることを確認してください。同時アップロードスレッドのデフォルト数は 1 です。
# num_threads=4)
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);
}
// バケットの名前を指定します。例: examplebucket。
String bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。例: exampledir/exampleobject.txt。完全なパスにはバケット名を含めないでください。
String objectName = "exampledir/exampleobject.txt";
// ローカルファイルの完全なパスを指定します。例: /storage/emulated/0/oss/examplefile.txt。
String localFilepath = "/storage/emulated/0/oss/examplefile.txt";
String recordDirectory = Environment.getExternalStorageDirectory().getAbsolutePath() + "/oss_record/";
File recordDir = new File(recordDirectory);
// チェックポイントファイルを格納するために使用されるディレクトリが存在することを確認します。ディレクトリが存在しない場合は、ディレクトリを作成します。
if (!recordDir.exists()) {
recordDir.mkdirs();
}
// 再開可能なアップロードリクエストを作成し、チェックポイントファイルの絶対パスを指定します。
ResumableUploadRequest request = new ResumableUploadRequest(bucketName, objectName, localFilepath, recordDirectory);
// OSSAsyncTask cancel() メソッドを使用する場合は、DeleteUploadOnCancelling パラメータを false に設定します。false は、チェックポイントファイルが保持されることを示します。オブジェクトは、次のアップロード中にチェックポイントファイルに記録されている位置からアップロードされます。このパラメータを指定しない場合、デフォルト値 true が使用されます。true は、チェックポイントファイルが削除されることを示します。次のアップロード中にオブジェクト全体が再アップロードされます。
request.setDeleteUploadOnCancelling(false);
// アップロードコールバックを構成します。
request.setProgressCallback(new OSSProgressCallback<ResumableUploadRequest>() {
@Override
public void onProgress(ResumableUploadRequest request, long currentSize, long totalSize) {
Log.d("resumableUpload", "currentSize: " + currentSize + " totalSize: " + totalSize);
}
});
ResumableUploadResult uploadResult = oss.resumableUpload(request);
// オブジェクトをアップロードするためのアップロード 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 を使用するかど
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')
# key パラメーターにオブジェクトの完全なパスを設定します。完全なパスにバケット名を含めないでください。例: exampledir/example.zip。
# file パラメーターに、アップロードするローカルファイルの完全なパスを設定します。例: /tmp/example.zip。
bucket.resumable_upload('exampledir/example.zip', '/tmp/example.zip') do |p|
puts "Progress: #{p}"
end
bucket.resumable_upload(
'exampledir/example.zip', '/tmp/example.zip',
:part_size => 100 * 1024, :cpt_file => '/tmp/example.zip.cpt') { |p|
puts "Progress: #{p}"
}
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", "", "バケットが配置されているリージョン。")
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)
// OSSClient インスタンスを作成します。
client := oss.NewClient(cfg)
// NewUploader 関数を使用して、OSSClient インスタンスを初期化します。
u := client.NewUploader()
// ローカル ファイルのパスを指定します。"/Users/yourLocalPath/yourFileName" をローカル ファイルの実際のパスと名前に置き換えます。
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("ファイルのアップロードに失敗しました %v", err)
}
// オブジェクトのアップロード結果を表示します。
log.Printf("ファイルのアップロード結果: %#v\n", result)
}