Jika Anda hanya memerlukan sebagian data file, Anda dapat menggunakan unduhan rentang untuk mengambil data dalam rentang tertentu.
Catatan penggunaan
Topik ini menggunakan titik akhir publik wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lain 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 Anda ingin membuat OSSClient dengan nama domain kustom atau Security Token Service (STS), lihat Buat instans OssClient.
Untuk melakukan unduhan rentang, Anda harus memiliki izin
oss:GetObject. Untuk informasi selengkapnya, lihat Berikan izin kustom kepada RAM user.
Tentukan rentang unduhan normal
Kode berikut menunjukkan cara menentukan rentang unduhan yang valid untuk mengunduh file.
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Inisialisasi informasi akun OSS. */
/* Tetapkan yourEndpoint ke titik akhir wilayah tempat bucket berada. Misalnya, tetapkan titik akhir ke https://oss-cn-hangzhou.aliyuncs.com untuk bucket di wilayah China (Hangzhou). */
std::string Endpoint = "yourEndpoint";
/* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, tetapkan wilayah ke cn-hangzhou untuk bucket di wilayah China (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";
/* Inisialisasi sumber daya jaringan. */
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 disetel. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* Ambil file. */
GetObjectRequest request(BucketName, ObjectName);
/* Tetapkan rentang unduhan. */
request.setRange(0, 1);
auto outcome = client.GetObject(request);
if (!outcome.isSuccess ()) {
/* Tangani pengecualian. */
std::cout << "getObject gagal" <<
",kode:" << outcome.error().Code() <<
",pesan:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* Lepaskan sumber daya jaringan. */
ShutdownSdk();
return 0;
}Tentukan rentang unduhan yang tidak valid
Misalnya, Anda memiliki objek berukuran 1.000 byte. Rentang unduhan yang valid adalah 0 hingga 999. Jika Anda menentukan rentang di luar interval yang valid ini, header Range tidak berpengaruh. OSS akan mengembalikan kode status 200 dan mengirim seluruh objek. Contoh berikut menunjukkan permintaan yang tidak valid beserta tanggapannya:
Jika Anda menentukan Range: bytes=500-2000, akhir rentang berada di luar interval yang valid. OSS mengembalikan seluruh objek dan kode status HTTP 200.
Jika Anda menentukan Range: bytes=1000-2000, awal rentang berada di luar interval yang valid. OSS mengembalikan seluruh objek dan kode status HTTP 200.
Perilaku standar untuk unduhan rentang
Anda dapat menambahkan header x-oss-range-behavior: standard ke permintaan untuk mengubah perilaku unduhan OSS pada rentang yang berada di luar interval yang valid. Misalnya, Anda memiliki objek berukuran 1.000 byte:
Jika Anda menentukan Range: bytes=500-2000, akhir rentang berada di luar interval yang valid. OSS mengembalikan konten dari byte 500 hingga byte 999 dan kode status HTTP 206.
Jika Anda menentukan Range: bytes=1000-2000, awal rentang berada di luar interval yang valid. OSS mengembalikan kode status HTTP 416 dan kode kesalahan InvalidRange.
Kode berikut menunjukkan cara melakukan unduhan rentang dengan perilaku standar.
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Inisialisasi informasi akun OSS. */
/* Tetapkan yourEndpoint ke titik akhir wilayah tempat bucket berada. Misalnya, tetapkan titik akhir ke https://oss-cn-hangzhou.aliyuncs.com untuk bucket di wilayah China (Hangzhou). */
std::string Endpoint = "yourEndpoint";
/* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, tetapkan wilayah ke cn-hangzhou untuk bucket di wilayah China (Hangzhou). */
std::string Region = "yourRegion";
/* Tentukan nama bucket. Misalnya, examplebucket. */
std::string BucketName = "examplebucket";
/* Tentukan file berukuran 1000 byte. */
/* Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Misalnya, exampledir/exampleobject.txt. */
std::string ObjectName = "yourObjectName";
/* Inisialisasi sumber daya jaringan. */
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 disetel. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* Ambil file. */
GetObjectRequest request(BucketName, ObjectName);
/* Tetapkan rentang unduhan. */
/* Akhir rentang berada di luar interval yang valid. Konten dari byte 500 hingga 999 dikembalikan, dan kode status HTTP adalah 206. */
request.setRange(500, 2000, true);
auto outcome = client.GetObject(request);
/* Awal rentang berada di luar interval yang valid. Pengecualian dilemparkan. Kode status HTTP 416 dikembalikan bersama kode kesalahan InvalidRange. */
request.setRange(1000, 2000, true);
outcome = client.GetObject(request);
if (!outcome.isSuccess ()) {
/* Tangani pengecualian. */
std::cout << "getObject gagal" <<
",kode:" << outcome.error().Code() <<
",pesan:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* Lepaskan sumber daya jaringan. */
ShutdownSdk();
return 0;
}Referensi
Untuk informasi selengkapnya mengenai operasi API untuk unduhan rentang, lihat GetObject.