Jika jaringan tidak stabil atau terjadi pengecualian program, objek besar dengan ukuran lebih dari 5 GB mungkin gagal diunggah ke Object Storage Service (OSS). Dalam beberapa kasus, pengunggahan tetap gagal meskipun sudah beberapa kali diulang. Untuk mengatasi hal ini, Anda dapat menggunakan unggah yang dapat dilanjutkan. Objek besar dapat dibagi menjadi beberapa bagian dan diunggah secara paralel untuk mempercepat proses. Selama proses unggah, kemajuan dicatat dalam file titik pemeriksaan. Jika salah satu bagian gagal diunggah, proses akan dilanjutkan dari posisi yang tercatat dalam file tersebut. Setelah semua bagian berhasil diunggah, bagian-bagian tersebut digabungkan menjadi satu objek lengkap.
Prasyarat
Bucket telah dibuat. Untuk informasi lebih lanjut, lihat Buat bucket.
Catatan penggunaan
Dalam topik ini, titik akhir publik wilayah Tiongkok (Hangzhou) digunakan. Untuk mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk detail tentang wilayah dan titik akhir yang didukung, lihat Wilayah dan titik akhir.
Untuk menggunakan unggah yang dapat dilanjutkan, Anda harus memiliki izin
oss:PutObject. Untuk informasi lebih lanjut, lihat Lampirkan kebijakan kustom ke Pengguna RAM.Kemajuan unggah dicatat dalam file titik pemeriksaan. Pastikan Anda memiliki izin menulis pada file tersebut.
File titik pemeriksaan berisi checksum. Checksum ini tidak dapat diubah. Jika file titik pemeriksaan rusak, Anda harus mengunggah ulang semua bagian objek.
Jika file lokal dimodifikasi selama proses unggah, Anda harus mengunggah ulang semua bagian objek.
Gunakan OSS SDK
Berikut adalah contoh kode sampel yang menunjukkan cara melakukan unggah yang dapat dilanjutkan menggunakan OSS SDK untuk bahasa pemrograman umum. Untuk informasi lebih lanjut tentang cara melakukan unggah yang dapat dilanjutkan menggunakan OSS SDK untuk bahasa pemrograman lainnya, lihat Ikhtisar.
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 {
// Dalam contoh ini, titik akhir wilayah Tiongkok (Hangzhou) digunakan. Tentukan titik akhir aktual Anda.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), atur wilayah ke cn-hangzhou.
String region = "cn-hangzhou";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Buat instance OSSClient.
// Panggil metode shutdown untuk melepaskan sumber daya terkait ketika OSSClient tidak lagi digunakan.
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();
// Tentukan jenis konten yang ingin Anda unggah.
// meta.setContentType("text/plain");
// Tentukan daftar kontrol akses (ACL) objek yang ingin Anda unggah.
// meta.setObjectAcl(CannedAccessControlList.Private);
// Konfigurasikan beberapa parameter menggunakan UploadFileRequest.
// Tentukan nama bucket seperti examplebucket dan jalur lengkap objek seperti exampledir/exampleobject.txt. Jangan masukkan nama bucket dalam jalur lengkap.
UploadFileRequest uploadFileRequest = new UploadFileRequest("examplebucket","exampledir/exampleobject.txt");
// Konfigurasikan parameter tunggal menggunakan UploadFileRequest.
// Tentukan jalur lengkap file lokal yang ingin Anda unggah. Contoh: D:\\localpath\\examplefile.txt. Secara default, jika Anda tidak menentukan jalur lengkap file lokal, file lokal diunggah dari jalur proyek tempat program sampel milik.
uploadFileRequest.setUploadFile("D:\\localpath\\examplefile.txt");
// Tentukan jumlah thread konkuren untuk tugas unggah. Nilai default: 1.
uploadFileRequest.setTaskNum(5);
// Tentukan ukuran bagian. Unit: byte. Nilai valid: 100 KB hingga 5 GB. Nilai default: 100 KB.
uploadFileRequest.setPartSize(1 * 1024 * 1024);
// Tentukan apakah akan mengaktifkan unggah yang dapat dilanjutkan. Secara default, unggah yang dapat dilanjutkan dinonaktifkan.
uploadFileRequest.setEnableCheckpoint(true);
// Tentukan file titik pemeriksaan yang mencatat kemajuan unggah setiap bagian. File titik pemeriksaan ini menyimpan informasi tentang kemajuan unggah. Jika sebuah bagian gagal diunggah, tugas dapat dilanjutkan berdasarkan kemajuan yang tercatat dalam file titik pemeriksaan. Setelah file lokal diunggah ke OSS, file titik pemeriksaan dihapus.
// Secara default, jika Anda tidak menentukan parameter ini, file titik pemeriksaan disimpan di direktori yang sama dengan file lokal yang ingin Anda unggah. Direktori tersebut diberi nama ${uploadFile}.ucp.
uploadFileRequest.setCheckpointFile("yourCheckpointFile");
// Konfigurasikan metadata objek.
uploadFileRequest.setObjectMetadata(meta);
// Konfigurasikan callback unggah. Jenis parameternya adalah Callback.
//uploadFileRequest.setCallback("yourCallbackEvent");
// Mulai unggah yang dapat dilanjutkan.
ossClient.uploadFile(uploadFileRequest);
} catch (OSSException oe) {
System.out.println("Tangkap OSSException, yang berarti permintaan Anda berhasil mencapai OSS, "
+ "tetapi ditolak dengan respons kesalahan karena alasan tertentu.");
System.out.println("Pesan Kesalahan:" + oe.getErrorMessage());
System.out.println("Kode Kesalahan:" + oe.getErrorCode());
System.out.println("ID Permintaan:" + oe.getRequestId());
System.out.println("ID Host:" + oe.getHostId());
} catch (Throwable ce) {
System.out.println("Tangkap ClientException, yang berarti klien mengalami "
+ "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
+ "seperti tidak dapat mengakses jaringan.");
System.out.println("Pesan Kesalahan:" + ce.getMessage());
} finally {
// Matikan instance OSSClient.
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
const OSS = require('ali-oss')
const client = new OSS({
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), atur wilayah ke oss-cn-hangzhou.
region: 'yourregion',
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// Tentukan nama bucket.
bucket: 'examplebucket',
});
// Tentukan jalur lokal file yang diunggah.
const filePath = "yourfilepath";
let checkpoint;
async function resumeUpload() {
// Atur jumlah operasi pengulangan unggah menjadi 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; // Keluar dari loop.
} catch (e) {
console.log(e);
}
}
}
resumeUpload();using Aliyun.OSS;
using Aliyun.OSS.Common;
// Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "yourEndpoint";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Tentukan nama bucket. Contoh: examplebucket.
var bucketName = "examplebucket";
// Tentukan jalur lengkap objek. Jangan masukkan nama bucket dalam jalur lengkap. Contoh: exampledir/exampleobject.txt.
var objectName = "exampledir/exampleobject.txt";
// Tentukan jalur lengkap file lokal yang ingin Anda unggah. Contoh: D:\\localpath\\examplefile.txt.
// Secara default, jika Anda hanya menentukan nama file lokal seperti examplefile.txt tanpa menentukan jalur lokal, file lokal diunggah dari jalur proyek tempat program sampel milik.
var localFilename = "D:\\localpath\\examplefile.txt";
// Tentukan file titik pemeriksaan. File titik pemeriksaan menyimpan informasi tentang kemajuan unggah.
string checkpointDir = "yourCheckpointDir";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), atur wilayah ke cn-hangzhou.
const string region = "cn-hangzhou";
// Buat instance ClientConfiguration dan modifikasi parameter default berdasarkan kebutuhan Anda.
var conf = new ClientConfiguration();
// Gunakan algoritma tanda tangan V4.
conf.SignatureVersion = SignatureVersion.V4;
// Buat instance OSSClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
// Konfigurasikan parameter menggunakan UploadFileRequest.
UploadObjectRequest request = new UploadObjectRequest(bucketName, objectName, localFilename)
{
// Tentukan ukuran setiap bagian.
PartSize = 8 * 1024 * 1024,
// Tentukan jumlah thread konkuren.
ParallelThreadCount = 3,
// Tentukan parameter checkpointDir untuk menyimpan status tugas unggah yang dapat dilanjutkan, yang digunakan untuk melanjutkan tugas unggah jika tugas unggah gagal.
// Jika Anda mengatur checkpointDir ke null, unggah yang dapat dilanjutkan tidak berlaku dan objek diunggah ulang jika objek gagal diunggah.
CheckpointDir = checkpointDir,
};
// Mulai unggah yang dapat dilanjutkan.
client.ResumableUploadObject(request);
Console.WriteLine("Unggah objek yang dapat dilanjutkan:{0} berhasil", objectName);
}
catch (OssException ex)
{
Console.WriteLine("Gagal dengan kode kesalahan: {0}; Informasi kesalahan: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Gagal dengan informasi kesalahan: {0}", ex.Message);
}// Dapatkan ID unggah untuk mengunggah objek.
OSSResumableUploadRequest * resumableUpload = [OSSResumableUploadRequest new];
resumableUpload.bucketName = <bucketName>;
// objectKey setara dengan objectName yang menunjukkan jalur lengkap objek yang ingin Anda unggah ke OSS menggunakan unggah yang dapat dilanjutkan. Jalur tersebut harus mencakup ekstensi nama objek. Misalnya, Anda dapat mengatur objectKey ke 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];
// Tentukan jalur untuk menyimpan file titik pemeriksaan.
resumableUpload.recordDirectoryPath = cachesDir;
// Atur parameter deleteUploadIdOnCancelling ke NO. NO menunjukkan bahwa file titik pemeriksaan tidak dihapus ketika tugas unggah gagal. Unggah berikutnya dimulai dari posisi yang tercatat dalam file titik pemeriksaan hingga seluruh objek diunggah. Jika Anda tidak menentukan parameter ini, nilai default YES digunakan. YES menunjukkan bahwa file titik pemeriksaan dihapus ketika tugas unggah gagal. Seluruh objek diunggah ulang selama unggah berikutnya.
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) {
// Tugas tidak dapat dilanjutkan. Anda harus mendapatkan ID unggah baru untuk mengunggah objek.
}
} else {
NSLog(@"Unggah file berhasil");
}
return nil;
}];
// [resumeTask waitUntilFinished];
// [resumableUpload cancel];
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Inisialisasi informasi tentang akun yang digunakan untuk mengakses OSS. */
/* Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), atur wilayah ke cn-hangzhou. */
std::string Region = "yourRegion";
/* Tentukan nama bucket. Contoh: examplebucket. */
std::string BucketName = "examplebucket";
/* Tentukan jalur lengkap objek. Jangan masukkan nama bucket dalam jalur lengkap. Contoh: exampledir/exampleobject.txt. */
std::string ObjectName = "exampledir/exampleobject.txt";
/* Tentukan jalur lengkap file lokal. Contoh: D:\\localpath\\examplefile.txt. Secara default, jika Anda tidak menentukan jalur lengkap file lokal, file lokal diunggah dari jalur proyek tempat program sampel milik. */
std::string UploadFilePath = "D:\\localpath\\examplefile.txt";
/* Tentukan file titik pemeriksaan. Informasi kemajuan unggah disimpan dalam file ini. Jika sebuah bagian gagal diunggah, unggah dilanjutkan dari posisi yang tercatat dalam file. Setelah file lokal diunggah, file titik pemeriksaan dihapus. */
/* Tentukan direktori tempat file titik pemeriksaan disimpan dan pastikan direktori yang ditentukan ada, seperti D:\\local. Jika Anda tidak menentukan parameter ini, unggah yang dapat dilanjutkan tidak digunakan dan informasi tidak dicatat. */
std::string CheckpointFilePath = "D:\\local";
/* Inisialisasi sumber daya seperti sumber daya jaringan. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* Mulai unggah yang dapat dilanjutkan. */
UploadObjectRequest request(BucketName, ObjectName, UploadFilePath, CheckpointFilePath);
auto outcome = client.ResumableUploadObject(request);
if (!outcome.isSuccess()) {
/* Tangani pengecualian. */
std::cout << "ResumableUploadObject gagal" <<
",kode:" << outcome.error().Code() <<
",pesan:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* Lepaskan sumber daya seperti sumber daya jaringan. */
ShutdownSdk();
return 0;
}#include "oss_api.h"
#include "aos_http_io.h"
/* Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Tentukan nama bucket. Contoh: examplebucket. */
const char *bucket_name = "examplebucket";
/* Tentukan jalur lengkap objek. Jangan masukkan nama bucket dalam jalur lengkap. Contoh: exampledir/exampleobject.txt. */
const char *object_name = "exampledir/exampleobject.txt";
/* Tentukan jalur lengkap file lokal. */
const char *local_filename = "yourLocalFilename";
/* Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), atur wilayah ke cn-hangzhou. */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
/* Gunakan string char* untuk menginisialisasi data bertipe aos_string_t. */
aos_str_set(&options->config->endpoint, endpoint);
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */
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"));
// Tentukan dua parameter tambahan.
aos_str_set(&options->config->region, region);
options->config->signature_version = 4;
/* Tentukan apakah menggunakan CNAME. Nilai 0 menunjukkan bahwa CNAME tidak digunakan. */
options->config->is_cname = 0;
/* Konfigurasikan parameter jaringan, seperti periode timeout. */
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
/* Panggil metode aos_http_io_initialize di main() untuk menginisialisasi sumber daya global, seperti sumber daya jaringan dan sumber daya memori. */
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* Buat kolam memori untuk mengelola memori. aos_pool_t setara dengan apr_pool_t. Kode untuk membuat kolam memori termasuk dalam pustaka APR. */
aos_pool_t *pool;
/* Buat kolam memori. Nilai parameter kedua adalah NULL. Parameter ini menunjukkan bahwa kolam tidak mewarisi kolam memori lain. */
aos_pool_create(&pool, NULL);
/* Buat dan inisialisasi opsi. Parameter ini mencakup informasi konfigurasi global, seperti endpoint, access_key_id, access_key_secret, is_cname, dan curl. */
oss_request_options_t *oss_client_options;
/* Alokasikan sumber daya memori di kolam memori untuk opsi. */
oss_client_options = oss_request_options_create(pool);
/* Inisialisasi oss_client_options. */
init_options(oss_client_options);
/* Inisialisasi parameter. */
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);
/* Mulai unggah yang dapat dilanjutkan. */
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("unggah yang dapat dilanjutkan berhasil\n");
} else {
printf("unggah yang dapat dilanjutkan gagal\n");
}
/* Lepaskan kolam memori. Operasi ini melepaskan sumber daya memori yang dialokasikan untuk permintaan. */
aos_pool_destroy(pool);
/* Lepaskan sumber daya global yang dialokasikan. */
aos_http_io_deinitialize();
return 0;
}import argparse
import alibabacloud_oss_v2 as oss
# Buat parser argumen baris perintah dan jelaskan tujuan skrip: sampel unggah file
parser = argparse.ArgumentParser(description="sampel unggah file")
# Tambahkan argumen baris perintah --region, yang menentukan wilayah tempat bucket berada. Ini adalah parameter wajib.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
# Tambahkan argumen baris perintah --bucket, yang menentukan nama bucket tempat file diunggah. Ini adalah parameter wajib.
parser.add_argument('--bucket', help='Nama bucket.', required=True)
# Tambahkan argumen baris perintah --endpoint, yang menentukan nama domain yang dapat digunakan layanan lain untuk mengakses OSS. Ini adalah parameter opsional.
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
# Tambahkan argumen baris perintah --key, yang menentukan kunci objek (file) di OSS. Ini adalah parameter wajib.
parser.add_argument('--key', help='Nama objek.', required=True)
# Tambahkan argumen baris perintah --file_path, yang menentukan jalur file lokal yang akan diunggah. Ini adalah parameter wajib, misalnya, "/Users/yourLocalPath/yourFileName".
parser.add_argument('--file_path', help='Jalur file unggahan.', required=True)
def main():
# Parsing argumen baris perintah untuk mendapatkan nilai yang disediakan pengguna.
args = parser.parse_args()
# Muat informasi otentikasi yang diperlukan untuk mengakses OSS dari variabel lingkungan untuk verifikasi identitas.
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Buat objek konfigurasi menggunakan konfigurasi default SDK dan atur penyedia kredensial.
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
# Atur properti region objek konfigurasi berdasarkan argumen baris perintah yang diberikan pengguna.
cfg.region = args.region
# Jika titik akhir kustom diberikan, perbarui properti titik akhir dalam objek konfigurasi.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# Inisialisasi klien OSS menggunakan konfigurasi sebelumnya untuk mempersiapkan interaksi dengan OSS.
client = oss.Client(cfg)
# Buat objek untuk mengunggah file, aktifkan unggah yang dapat dilanjutkan, dan tentukan jalur untuk menyimpan file rekaman titik pemeriksaan.
uploader = client.uploader(enable_checkpoint=True, checkpoint_dir="/Users/yourLocalPath/checkpoint/")
# Panggil metode untuk melakukan operasi unggah file.
result = uploader.upload_file(
oss.PutObjectRequest(
bucket=args.bucket, # Tentukan bucket tujuan.
key=args.key, # Tentukan nama file di OSS.
),
filepath=args.file_path # Tentukan lokasi file lokal.
)
# Cetak informasi tentang hasil unggah, termasuk kode status, ID permintaan, dan Content-MD5.
print(f'kode status: {result.status_code},'
f' ID permintaan: {result.request_id},'
f' content md5: {result.headers.get("Content-MD5")},'
f' etag: {result.etag},'
f' hash crc64: {result.hash_crc64},'
f' ID versi: {result.version_id},'
f' waktu server: {result.headers.get("x-oss-server-time")},'
)
# Saat skrip ini dieksekusi langsung, panggil fungsi utama untuk memulai logika pemrosesan.
if __name__ == "__main__":
main() # Titik masuk skrip. Aliran program dimulai dari sini.<?php
// Impor file autoloader untuk memastikan bahwa pustaka dependensi dapat dimuat dengan benar.
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// Definisikan deskripsi argumen baris perintah.
$optsdesc = [
"region" => ['help' => 'Wilayah tempat bucket berada.', 'required' => True], // Wilayah tempat bucket berada (wajib).
"endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False], // Titik akhir (opsional).
"bucket" => ['help' => 'Nama bucket', 'required' => True], // Nama bucket (wajib).
"key" => ['help' => 'Nama objek', 'required' => True], // Nama objek (wajib).
];
// Konversikan deskripsi parameter ke format opsi panjang yang diperlukan oleh getopt.
// Tambahkan tanda titik dua ":" setelah setiap parameter untuk menunjukkan bahwa parameter tersebut memerlukan nilai.
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// Parsing argumen baris perintah.
$options = getopt("", $longopts);
// Verifikasi bahwa parameter wajib ada.
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help']; // Dapatkan informasi bantuan untuk parameter.
echo "Error: argumen berikut diperlukan: --$key, $help" . PHP_EOL;
exit(1); // Jika parameter wajib hilang, keluar dari program.
}
}
// Ekstrak nilai dari parameter yang telah diuraikan.
$region = $options["region"]; // Wilayah tempat bucket berada.
$bucket = $options["bucket"]; // Nama bucket.
$key = $options["key"]; // Nama objek.
// Muat kredensial akses dari variabel lingkungan.
// Gunakan EnvironmentVariableCredentialsProvider untuk membaca Access Key ID dan Access Key Secret dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// Gunakan konfigurasi default SDK.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // Atur penyedia kredensial.
$cfg->setRegion($region); // Atur wilayah tempat bucket berada.
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]); // Jika titik akhir diberikan, atur titik akhir.
}
// Buat instance klien OSS.
$client = new Oss\Client($cfg);
// Definisikan jalur file lokal yang akan diunggah.
$filename = "/Users/yourLocalPath/yourFileName"; // Contoh jalur file.
// Buat instance pengunggah.
$uploader = $client->newUploader();
// Jalankan operasi unggah multipart.
$result = $uploader->uploadFile(
request: new Oss\Models\PutObjectRequest(bucket: $bucket, key: $key), // Buat objek PutObjectRequest dan tentukan nama bucket dan objek.
filepath: $filename, // Tentukan jalur file lokal yang akan diunggah.
);
// Cetak hasil unggah multipart.
printf(
'status kode unggah multipart:' . $result->statusCode . PHP_EOL . // Kode status HTTP. Misalnya, 200 menunjukkan sukses.
'ID permintaan unggah multipart:' . $result->requestId . PHP_EOL . // ID permintaan, yang digunakan untuk debugging atau melacak permintaan.
'hasil unggah multipart:' . var_export($result, true) . PHP_EOL // Hasil rinci unggah multipart.
);
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"
)
// Tentukan variabel global.
var (
region string // Wilayah penyimpanan.
bucketName string // Nama bucket.
objectName string // Nama objek.
)
// Fungsi init digunakan untuk menginisialisasi parameter baris perintah.
func init() {
flag.StringVar(®ion, "region", "", "Wilayah tempat bucket berada.")
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
flag.StringVar(&objectName, "object", "", "Nama objek sumber.")
}
func main() {
// Parsing parameter baris perintah.
flag.Parse()
// Periksa apakah nama bucket kosong.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket diperlukan")
}
// Periksa apakah wilayah kosong.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah diperlukan")
}
// Periksa apakah nama objek kosong.
if len(objectName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama objek sumber diperlukan")
}
// Muat konfigurasi default dan atur penyedia kredensial dan wilayah.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// Buat klien OSS.
client := oss.NewClient(cfg)
// Buat pengunggah.
u := client.NewUploader()
// Tentukan jalur file lokal. Anda perlu mengganti jalur dengan jalur file lokal dan nama file yang sebenarnya.
localFile := "/Users/yourLocalPath/yourFileName"
// Unggah file.
result, err := u.UploadFile(context.TODO(),
&oss.PutObjectRequest{
Bucket: oss.Ptr(bucketName),
Key: oss.Ptr(objectName)},
localFile)
if err != nil {
log.Fatalf("gagal mengunggah file %v", err)
}
// Cetak hasil unggah.
log.Printf("hasil unggah file:%#v\n", result)
}