Saat menggunakan unggah yang dapat dilanjutkan untuk mengunggah file ke Object Storage Service (OSS), Anda dapat menentukan file checkpoint. Jika pengunggahan terganggu oleh error jaringan atau crash program, proses akan dilanjutkan dari posisi yang dicatat dalam file checkpoint tersebut.
Catatan penggunaan
Pada topik ini, digunakan titik akhir publik wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lainnya yang berada di wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir OSS, lihat Wilayah dan titik akhir.
Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika ingin membuat OSSClient dengan nama domain kustom atau Security Token Service (STS), lihat Buat instans OssClient.
Untuk melakukan unggah yang dapat dilanjutkan, Anda harus memiliki izin
oss:PutObject. Untuk informasi selengkapnya, lihat Lampirkan kebijakan kustom ke RAM user.Saat menggunakan unggah yang dapat dilanjutkan, progres pengunggahan direkam dalam file checkpoint. Jika suatu bagian gagal diunggah, pengunggahan akan dilanjutkan dari titik yang dicatat dalam file checkpoint tersebut. Setelah pengunggahan selesai, file checkpoint akan dihapus.
Jangan ubah informasi verifikasi dalam file checkpoint. Jika file checkpoint rusak, semua shard akan diunggah ulang.
Jika file lokal berubah selama proses pengunggahan, semua shard akan diunggah ulang.
Implementasi
Anda dapat menggunakan metode client.ResumableUploadObject untuk melakukan unggah yang dapat dilanjutkan. UploadObjectRequest dalam metode ini mencakup parameter berikut:
Parameter | Deskripsi | Wajib | Nilai default | Cara mengatur |
bucket | Nama bucket. | Ya | Tidak ada | Diatur dalam konstruktor. |
key | Nama file yang akan diunggah ke OSS. | Ya | Tidak ada | |
filePath | Nama file lokal yang akan diunggah. | Tidak | Tidak ada | |
partSize | Ukuran setiap bagian. Nilainya harus berada dalam rentang 100 KB hingga 5 GB. | Tidak | 8 MB | Gunakan setPartSize. |
threadNum | Jumlah thread konkuren untuk unggah multi-bagian. | Tidak | 3 | Diatur dalam konstruktor atau gunakan setThreadNum. |
checkpointDir | File yang mencatat progres pengunggahan. Jika pengunggahan terganggu, proses dilanjutkan dari titik yang dicatat dalam file ini. File ini dihapus setelah pengunggahan selesai. | Tidak | Folder yang sama dengan DownloadFile. | Diatur dalam konstruktor atau gunakan setCheckpointDir. |
Kode contoh
Kode berikut memberikan contoh cara melakukan unggah yang dapat dilanjutkan.
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Inisialisasi informasi akun OSS. */
/* Atur yourEndpoint ke titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Atur yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou. */
std::string Region = "yourRegion";
/* Tentukan nama bucket, misalnya examplebucket. */
std::string BucketName = "examplebucket";
/* Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Misalnya, exampledir/exampleobject.txt. */
std::string ObjectName = "exampledir/exampleobject.txt";
/* Tentukan path lengkap file lokal, misalnya D:\\localpath\\examplefile.txt. Jika Anda tidak menentukan path lokal, file akan diunggah dari path lokal yang sesuai dengan proyek tempat program contoh berada. */
std::string UploadFilePath = "D:\\localpath\\examplefile.txt";
/* File yang mencatat hasil pengunggahan bagian lokal. Progres pengunggahan disimpan dalam file ini. Jika suatu bagian gagal diunggah, upaya pengunggahan berikutnya akan dilanjutkan dari breakpoint yang dicatat dalam file ini. Setelah pengunggahan selesai, file ini dihapus. */
/* Atur direktori tempat file checkpoint disimpan dan pastikan direktori yang ditentukan sudah ada, misalnya D:\\local. Jika nilai ini tidak diatur, informasi checkpoint tidak akan direkam dan unggah yang dapat dilanjutkan tidak digunakan. */
std::string CheckpointFilePath = "D:\\local";
/* Inisialisasi jaringan dan sumber daya lainnya. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* Lakukan unggah yang dapat dilanjutkan. */
UploadObjectRequest request(BucketName, ObjectName, UploadFilePath, CheckpointFilePath);
auto outcome = client.ResumableUploadObject(request);
if (!outcome.isSuccess()) {
/* Tangani exception. */
std::cout << "ResumableUploadObject fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* Lepaskan jaringan dan sumber daya lainnya. */
ShutdownSdk();
return 0;
}Referensi
Untuk kode contoh lengkap mengenai unggah yang dapat dilanjutkan, lihat contoh di GitHub.