Unduhan sederhana menggunakan operasi GetObject dari API Object Storage Service (OSS) untuk mengunduh objek. Metode ini cocok untuk mengunduh objek dalam satu permintaan HTTP.
Prasyarat
Objek telah diunggah ke OSS. Untuk informasi selengkapnya, lihat Unggah objek.
Jika Anda ingin mengunduh objek Archive, pastikan objek berada dalam keadaan dipulihkan atau akses waktu nyata untuk objek Archive telah diaktifkan pada bucket tersebut. Untuk informasi selengkapnya, lihat Pulihkan objek dan akses waktu nyata untuk objek Archive.
Jika Anda ingin mengunduh objek Cold Archive atau Deep Cold Archive, pastikan objek berada dalam keadaan dipulihkan. Untuk informasi selengkapnya, lihat Pulihkan objek.
Metode
Gunakan Konsol OSS
Anda tidak dapat mengunduh direktori atau subdirektorinya dari Konsol OSS. Untuk mengunduh direktori atau subdirektorinya, gunakan ossbrowser, ossutil, SDK, atau operasi API.
Masuk ke Konsol OSS.
Di panel navigasi sebelah kiri, klik Buckets. Pada halaman Buckets, temukan dan klik bucket yang diinginkan.
Di pohon navigasi sebelah kiri, pilih Object Management > Objects.
Unduh objek.
Unduh satu objek
Metode 1: Di kolom Actions objek target, pilih
> Download.CatatanJika Anda memindahkan operasi ini dari bagian default Added to More ke bagian Common Object Operations, Anda dapat melihat operasi tersebut tanpa mengklik ikon
.Metode 2: Klik nama objek target atau klik View Details di kolom Actions. Di panel Detail yang muncul, klik Download.
Unduh beberapa objek
Pilih beberapa objek dan klik Download di bagian bawah daftar. Anda dapat mengunduh hingga 100 objek sekaligus dari Konsol OSS.
Gunakan antarmuka GUI ossbrowser
ossbrowser menyediakan operasi tingkat objek yang serupa dengan Konsol OSS. Anda dapat mengikuti petunjuk di antarmuka pengguna ossbrowser untuk mengunduh objek. Untuk informasi selengkapnya, lihat Operasi umum.
Gunakan SDK Alibaba Cloud
Kode berikut memberikan contoh cara melakukan unduhan sederhana menggunakan SDK umum. Untuk informasi tentang cara melakukan unduhan ini menggunakan SDK lainnya, lihat Ikhtisar SDK.
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.GetObjectRequest;
import java.io.File;
public class Demo {
public static void main(String[] args) throws Exception {
// Tetapkan Endpoint. Gunakan wilayah China (Hangzhou) sebagai contoh. Atur Endpoint sesuai wilayah aktual.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan nama bucket. Contoh: examplebucket.
String bucketName = "examplebucket";
// Tentukan path lengkap objek. Jangan sertakan nama bucket. Contoh: testfolder/exampleobject.txt.
String objectName = "testfolder/exampleobject.txt";
// Tentukan path lengkap tujuan unduhan objek.
String pathName = "D:\\localpath\\examplefile.txt";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Region menjadi cn-hangzhou.
String region = "cn-hangzhou";
// Buat instance OSSClient.
// Setelah instance OSSClient tidak digunakan lagi, panggil metode shutdown untuk melepas sumber daya.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Unduh objek ke file lokal dan simpan ke path lokal yang ditentukan. Jika file lokal yang ditentukan sudah ada, file tersebut akan ditimpa. Jika belum ada, file tersebut akan dibuat.
// Jika Anda tidak menentukan path lokal, objek yang diunduh akan disimpan ke path lokal yang sesuai dengan proyek program contoh secara default.
ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File(pathName));
} catch (OSSException oe) {
System.out.println("Terjadi OSSException, yang berarti permintaan Anda berhasil mencapai OSS, "
+ "tetapi ditolak dengan tanggapan error karena suatu alasan.");
System.out.println("Pesan Error:" + oe.getErrorMessage());
System.out.println("Kode Error:" + oe.getErrorCode());
System.out.println("ID Permintaan:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Terjadi ClientException, yang berarti klien mengalami "
+ "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
+ "seperti tidak dapat mengakses jaringan.");
System.out.println("Pesan Error:" + ce.getMessage());
} finally {
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 China (Hangzhou), atur region menjadi oss-cn-hangzhou.
region: 'yourRegion',
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan Anda telah mengonfigurasi variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
// Tentukan nama bucket.
bucket: 'examplebucket'
});
async function get () {
try {
// Tentukan path lengkap objek dan file lokal. Jangan sertakan nama bucket dalam path lengkap objek.
// Jika file dengan nama yang sama sudah ada, objek yang diunduh akan menimpa file tersebut. Jika tidak, objek yang diunduh akan disimpan sebagai file lokal.
// Jika Anda tidak menentukan path untuk objek yang diunduh, objek tersebut akan disimpan ke path proyek tempat program contoh berada.
const result = await client.get('exampleobject.txt', 'D:\\localpath\\examplefile.txt');
console.log(result);
} catch (e) {
console.log(e);
}
}
get(); <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<!-- Impor file SDK -->
<script
type="text/javascript"
src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.18.0.min.js"
></script>
<script type="text/javascript">
const client = new OSS({
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur region menjadi oss-cn-hangzhou.
region: "yourRegion",
authorizationV4: true,
// Tentukan pasangan AccessKey sementara yang diperoleh dari STS. Pasangan AccessKey terdiri dari ID AccessKey dan rahasia AccessKey.
accessKeyId: "yourAccessKeyId",
accessKeySecret: "yourAccessKeySecret",
// Tentukan token keamanan yang diperoleh dari STS.
stsToken: "yoursecurityToken",
// Tentukan nama bucket.
bucket: "examplebucket",
});
// Atur header respons agar objek diunduh secara otomatis melalui URL, dan tetapkan nama file lokal setelah objek diunduh.
const filename = "examplefile.txt";
const response = {
"content-disposition": `attachment; filename=${encodeURIComponent(
filename
)}`,
};
// Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap.
const url = client.signatureUrl("exampleobject.txt", { response });
console.log(url);
</script>
</body>
</html>// Buat permintaan unduhan objek.
// Tentukan nama bucket dan path lengkap objek. Dalam contoh ini, nama bucket adalah examplebucket dan path lengkap objek adalah exampledir/exampleobject.txt. Jangan sertakan nama bucket dalam path lengkap.
GetObjectRequest get = new GetObjectRequest("examplebucket", "exampledir/exampleobject.txt");
oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
@Override
public void onSuccess(GetObjectRequest request, GetObjectResult result) {
// Mulai membaca data.
long length = result.getContentLength();
if (length > 0) {
byte[] buffer = new byte[(int) length];
int readCount = 0;
while (readCount < length) {
try{
readCount += result.getObjectContent().read(buffer, readCount, (int) length - readCount);
}catch (Exception e){
OSSLog.logInfo(e.toString());
}
}
// Tentukan path lengkap objek yang diunduh. Contoh: D:\\localpath\\exampleobject.jpg.
try {
FileOutputStream fout = new FileOutputStream("download_filePath");
fout.write(buffer);
fout.close();
} catch (Exception e) {
OSSLog.logInfo(e.toString());
}
}
}
@Override
public void onFailure(GetObjectRequest request, ClientException clientException,
ServiceException serviceException) {
}
});OSSGetObjectRequest * request = [OSSGetObjectRequest new];
// Tentukan nama bucket. Contoh: examplebucket.
request.bucketName = @"examplebucket";
// Tentukan path lengkap objek. Contoh: exampledir/exampleobject.txt. Jangan sertakan nama bucket dalam path lengkap.
request.objectKey = @"exampledir/exampleobject.txt";
// Konfigurasi bidang opsional.
request.downloadProgress = ^(int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite) {
// Tentukan jumlah byte yang sedang diunduh, jumlah byte yang telah diunduh, dan jumlah total byte yang ingin diunduh.
NSLog(@"%lld, %lld, %lld", bytesWritten, totalBytesWritten, totalBytesExpectedToWrite);
};
// request.range = [[OSSRange alloc] initWithStart:0 withEnd:99]; // bytes=0-99. Tentukan bahwa rentang unduhan adalah dari byte 0 hingga byte 99.
// request.downloadToFileURL = [NSURL fileURLWithPath:@"<filepath>"]; // Jika Anda perlu langsung mengunduh objek ke file, tentukan path file tersebut.
OSSTask * getTask = [client getObject:request];
[getTask continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
NSLog(@"unduh objek berhasil!");
OSSGetObjectResult * getResult = task.result;
NSLog(@"hasil unduhan: %@", getResult.downloadedData);
} else {
NSLog(@"unduh objek gagal, error: %@" ,task.error);
}
return nil;
}];
// [getTask waitUntilFinished];
// [request cancel];#include <alibabacloud/oss/OssClient.h>
#include <memory>
#include <fstream>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Inisialisasi informasi akun yang digunakan untuk mengakses OSS. */
/* Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur region menjadi cn-hangzhou. */
std::string Region = "yourRegion";
/* Tentukan nama bucket. Contoh: examplebucket. */
std::string BucketName = "examplebucket";
/* Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap. Contoh: exampledir/exampleobject.txt. */
std::string ObjectName = "exampledir/exampleobject.txt";
/* Unduh objek sebagai file lokal bernama examplefile.txt dan simpan file tersebut ke D:\\localpath. Jika file dengan nama yang sama sudah ada di path yang ditentukan, objek yang diunduh akan menimpa file tersebut. Jika tidak, objek yang diunduh akan disimpan di path tersebut. */
/* Jika Anda tidak menentukan path file lokal, objek yang diunduh akan disimpan ke path proyek tempat program contoh berada. */
std::string FileNametoSave = "D:\\localpath\\examplefile.txt";
/* Inisialisasi sumber daya seperti sumber daya jaringan. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, 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);
/* Unduh objek sebagai file lokal. */
GetObjectRequest request(BucketName, ObjectName);
request.setResponseStreamFactory([=]() {return std::make_shared<std::fstream>(FileNametoSave, std::ios_base::out | std::ios_base::in | std::ios_base::trunc| std::ios_base::binary); });
auto outcome = client.GetObject(request);
if (outcome.isSuccess()) {
std::cout << "GetObjectToFile berhasil" << outcome.result().Metadata().ContentLength() << std::endl;
}
else {
/* Tangani pengecualian. */
std::cout << "GetObjectToFile 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 endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Tentukan nama bucket. Contoh: examplebucket. */
const char *bucket_name = "examplebucket";
/* Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap. Contoh: exampledir/exampleobject.txt. */
const char *object_name = "exampledir/exampleobject.txt";
/* Tentukan path lengkap file lokal. */
const char *local_filename = "yourLocalFilename";
/* Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur region menjadi 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 contoh, 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 akan menggunakan CNAME. Nilai 0 berarti CNAME tidak digunakan. */
options->config->is_cname = 0;
/* Tentukan 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 memori. */
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
/* Buat pool memori untuk mengelola memori. aos_pool_t setara dengan apr_pool_t. Kode untuk membuat pool memori termasuk dalam library APR. */
aos_pool_t *pool;
/* Buat pool memori. Nilai parameter kedua adalah NULL. Nilai ini menunjukkan bahwa pool tidak mewarisi pool memori lainnya. */
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 dalam pool memori ke 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_table_t *params;
aos_table_t *headers = NULL;
aos_table_t *resp_headers = NULL;
aos_status_t *resp_status = NULL;
aos_str_set(&bucket, bucket_name);
aos_str_set(&object, object_name);
aos_str_set(&file, local_filename);
params = aos_table_make(pool, 0);
/* Unduh objek ke file lokal Anda. Jika file dengan nama yang sama sudah ada, objek yang diunduh akan menimpa file tersebut. Jika tidak, file baru akan dibuat. */
resp_status = oss_get_object_to_file(oss_client_options, &bucket, &object, headers, params, &file, &resp_headers);
if (aos_status_is_ok(resp_status)) {
printf("Mendapatkan objek dari file berhasil\n");
} else {
printf("Mendapatkan objek dari file gagal\n");
}
/* Lepaskan pool memori. Operasi ini melepas sumber daya memori yang dialokasikan untuk permintaan. */
aos_pool_destroy(pool);
/* Lepaskan sumber daya global yang dialokasikan. */
aos_http_io_deinitialize();
return 0;
}require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
# Dalam contoh ini, endpoint wilayah China (Hangzhou) digunakan. Tentukan endpoint aktual Anda.
endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
access_key_id: ENV['OSS_ACCESS_KEY_ID'],
access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# Tentukan nama bucket. Contoh: examplebucket.
bucket = client.get_bucket('examplebucket')
# Unduh objek ke komputer lokal Anda.
bucket.get_object('exampleobject.txt', :file => 'D:\\localpath\\examplefile.txt')package main
import (
"context"
"flag"
"log"
"net/http"
"time"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
// Definisikan variabel global.
var (
region string // Wilayah tempat bucket berada.
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.")
}
func main() {
// Uraikan 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 diperlukan")
}
// Muat konfigurasi default dan tentukan penyedia kredensial serta wilayah.
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
// Buat klien OSS.
client := oss.NewClient(cfg)
// Tentukan path file lokal.
localFile := "download.file"
// Asumsikan objek terakhir dimodifikasi pada pukul 18:43:02 tanggal 21 Oktober 2024. Jika waktu UTC yang Anda masukkan lebih awal dari waktu ini, kondisi IfModifiedSince terpenuhi dan unduhan dipicu.
date := time.Date(2024, time.October, 21, 18, 43, 2, 0, time.UTC)
// Asumsikan ETag-nya adalah "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855". Jika ETag yang Anda masukkan sama dengan ETag objek, kondisi IfMatch terpenuhi dan unduhan dipicu.
etag := "\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\""
// Buat permintaan untuk mengunduh objek ke file lokal.
getRequest := &oss.GetObjectRequest{
Bucket: oss.Ptr(bucketName), // Nama bucket.
Key: oss.Ptr(objectName), // Nama objek.
IfModifiedSince: oss.Ptr(date.Format(http.TimeFormat)), // Tentukan parameter IfModifiedSince.
IfMatch: oss.Ptr(etag), // Tentukan parameter IfMatch.
}
// Unduh objek ke file lokal dan proses hasilnya.
result, err := client.GetObjectToFile(context.TODO(), getRequest, localFile)
if err != nil {
log.Fatalf("gagal mendapatkan objek ke file %v", err)
}
log.Printf("hasil mendapatkan objek ke file:%#v\n", result)
}
import argparse
import alibabacloud_oss_v2 as oss
import os
# Buat parser argumen baris perintah.
parser = argparse.ArgumentParser(description="contoh get object")
# Tambahkan argumen baris perintah --region untuk menentukan wilayah tempat bucket berada. Argumen ini wajib.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
# Tambahkan argumen baris perintah --bucket untuk menentukan nama bucket. Argumen ini wajib.
parser.add_argument('--bucket', help='Nama bucket.', required=True)
# Tambahkan argumen baris perintah --endpoint untuk menentukan nama domain yang dapat digunakan layanan lain untuk mengakses OSS. Argumen ini tidak wajib.
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
# Tambahkan argumen baris perintah --key untuk menentukan nama objek. Argumen ini wajib.
parser.add_argument('--key', help='Nama objek.', required=True)
def main():
# Uraikan argumen baris perintah.
args = parser.parse_args()
# Muat kredensial dari variabel lingkungan untuk verifikasi identitas.
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Muat konfigurasi default SDK dan atur penyedia kredensial.
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
# Atur wilayah dalam konfigurasi.
cfg.region = args.region
# Jika endpoint disediakan, atur endpoint dalam konfigurasi.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# Gunakan informasi yang dikonfigurasi untuk membuat klien OSS.
client = oss.Client(cfg)
# Jalankan permintaan untuk mendapatkan objek. Tentukan nama bucket dan nama objek.
result = client.get_object(oss.GetObjectRequest(
bucket=args.bucket, # Tentukan nama bucket.
key=args.key, # Tentukan kunci objek.
))
# Cetak hasil mendapatkan objek untuk memeriksa apakah permintaan berhasil.
print(f'kode status: {result.status_code},'
f' id permintaan: {result.request_id},'
f' panjang konten: {result.content_length},'
f' rentang konten: {result.content_range},'
f' tipe konten: {result.content_type},'
f' etag: {result.etag},'
f' terakhir dimodifikasi: {result.last_modified},'
f' md5 konten: {result.content_md5},'
f' kontrol cache: {result.cache_control},'
f' disposisi konten: {result.content_disposition},'
f' encoding konten: {result.content_encoding},'
f' kadaluarsa: {result.expires},'
f' hash crc64: {result.hash_crc64},'
f' kelas penyimpanan: {result.storage_class},'
f' tipe objek: {result.object_type},'
f' id versi: {result.version_id},'
f' jumlah tagging: {result.tagging_count},'
f' enkripsi sisi server: {result.server_side_encryption},'
f' enkripsi data sisi server: {result.server_side_data_encryption},'
f' posisi append berikutnya: {result.next_append_position},'
f' kadaluarsa: {result.expiration},'
f' pemulihan: {result.restore},'
f' status proses: {result.process_status},'
f' penanda hapus: {result.delete_marker},'
)
# ========== Metode 1: Baca seluruh objek ==========
with result.body as body_stream:
data = body_stream.read()
print(f"File dibaca. Panjang data: {len(data)} byte")
path = "./get-object-sample.txt"
with open(path, 'wb') as f:
f.write(data)
print(f"File diunduh dan disimpan ke path: {path}")
# # ========== Metode 2: Baca dalam potongan ==========
# with result.body as body_stream:
# chunk_path = "./get-object-sample-chunks.txt"
# total_size = 0
# with open(chunk_path, 'wb') as f:
# # Gunakan ukuran blok 256 KB. Anda dapat mengubah parameter block_size sesuai kebutuhan.
# for chunk in body_stream.iter_bytes(block_size=256 * 1024):
# f.write(chunk)
# total_size += len(chunk)
# print(f"Blok data diterima: {len(chunk)} byte | Total: {total_size} byte")
# print(f"File diunduh dan disimpan ke path: {chunk_path}")
# Saat skrip ini dijalankan secara langsung, fungsi main dipanggil.
if __name__ == "__main__":
main() # Titik masuk skrip. Saat file dijalankan secara langsung, fungsi main dipanggil.<?php
// Impor file autoloader untuk memastikan library dependensi dimuat dengan benar.
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// Definisikan deskripsi parameter 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], // Endpoint. (Opsional)
"bucket" => ['help' => 'Nama bucket', 'required' => True], // Nama bucket. (Wajib)
"key" => ['help' => 'Nama objek', 'required' => True], // Nama objek. (Wajib)
];
// Ubah deskripsi parameter ke format opsi panjang yang dibutuhkan oleh getopt.
// Titik dua ":" setelah setiap parameter menunjukkan bahwa parameter memerlukan nilai.
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// Uraikan parameter baris perintah.
$options = getopt("", $longopts);
// Periksa apakah parameter wajib tersedia.
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help']; // Dapatkan informasi bantuan parameter.
echo "Error: argumen berikut wajib: --$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 informasi kredensial dari variabel lingkungan.
// Gunakan EnvironmentVariableCredentialsProvider untuk membaca ID Access Key dan Rahasia Access Key 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 endpoint disediakan, atur endpoint.
}
// Buat instance klien OSS.
$client = new Oss\Client($cfg);
// Buat objek GetObjectRequest untuk mendapatkan konten objek yang ditentukan.
$request = new Oss\Models\GetObjectRequest(bucket: $bucket, key: $key);
// Jalankan operasi get object.
$result = $client->getObject($request);
// Definisikan path file lokal yang akan disimpan.
$localFilePath = 'path/to/local/file.txt'; // Ganti dengan path file aktual.
// Tulis konten ke file lokal.
file_put_contents( $localFilePath, $result->body->getContents());
// Cetak hasilnya.
// Keluarkan kode status HTTP, ID permintaan, dan konten objek.
printf(
'kode status:' . $result->statusCode . PHP_EOL . // Kode status HTTP. Misalnya, 200 menunjukkan permintaan berhasil.
'id permintaan:' . $result->requestId . PHP_EOL // ID permintaan, digunakan untuk debugging atau pelacakan permintaan.
);
Gunakan antarmuka baris perintah ossutil
Anda dapat menggunakan antarmuka baris perintah (CLI) ossutil untuk mengunduh file. Untuk informasi selengkapnya tentang cara menginstal ossutil, lihat Instal ossutil.
Perintah berikut mengunduh file exampleobject dari bucket examplebucket.
ossutil api get-object --bucket examplebucket --key exampleobjectUntuk informasi selengkapnya tentang perintah ini, lihat get-object.
Operasi API terkait
Metode-metode di atas dibangun di atas operasi API. Untuk kustomisasi lanjutan, Anda dapat memanggil RESTful API secara langsung. Memanggil API secara langsung mengharuskan Anda menulis kode secara manual untuk menghitung signature. Untuk informasi selengkapnya, lihat GetObject.
Izin
Secara default, Akun Alibaba Cloud memiliki izin penuh. Pengguna RAM atau Peran RAM di bawah Akun Alibaba Cloud tidak memiliki izin apa pun secara default. Akun Alibaba Cloud atau administrator akun harus memberikan izin operasi melalui RAM Policy atau Kebijakan bucket.
API | Action | Definisi |
GetObject |
| Mengunduh objek. |
| Saat mengunduh objek, jika Anda menentukan versi objek melalui versionId, izin ini diperlukan. | |
| Saat mengunduh objek, jika metadata objek berisi X-Oss-Server-Side-Encryption: KMS, izin ini diperlukan. |
Penagihan
Item yang dapat ditagih berikut berlaku untuk unduhan sederhana. Untuk informasi selengkapnya tentang harga satuan item yang dapat ditagih, lihat Harga Object Storage Service.
API | Item yang dapat ditagih | Deskripsi |
GetObject | Permintaan GET | Anda dikenai biaya permintaan berdasarkan jumlah permintaan yang berhasil. |
Lalu lintas outbound melalui Internet | Jika Anda memanggil operasi GetObject menggunakan titik akhir publik, seperti oss-cn-hangzhou.aliyuncs.com, atau titik akhir percepatan, seperti oss-accelerate.aliyuncs.com, Anda dikenai biaya lalu lintas outbound melalui Internet berdasarkan ukuran data. | |
Pengambilan data IA | Jika objek IA diambil, Anda dikenai biaya pengambilan data IA berdasarkan ukuran data IA yang diambil. | |
Pengambilan objek Archive di bucket yang diaktifkan akses waktu nyata | Jika Anda mengambil objek Archive di bucket yang diaktifkan akses waktu nyata, Anda dikenai biaya pengambilan data Archive berdasarkan ukuran objek Archive yang diambil. | |
Biaya akselerasi transfer | Jika Anda mengaktifkan akselerasi transfer dan menggunakan titik akhir percepatan untuk mengakses bucket Anda, Anda dikenai biaya akselerasi transfer berdasarkan ukuran data. |
Referensi
Untuk informasi selengkapnya tentang cara mengunduh objek dari bucket yang diaktifkan pengendalian versi, lihat Kelola objek di bucket yang diaktifkan pengendalian versi.
Untuk informasi selengkapnya tentang cara mengunduh objek dari bucket yang ditangguhkan pengendalian versinya, lihat Kelola objek di bucket yang ditangguhkan pengendalian versi.
OSS menyediakan kontrol akses tingkat bucket dan tingkat objek untuk mencegah pengguna yang tidak sah mengunduh data dari bucket Anda. Untuk informasi selengkapnya, lihat Ikhtisar izin dan kontrol akses.
Jika Anda ingin melanjutkan unduhan objek besar yang terputus, Anda dapat menggunakan unduhan yang dapat dilanjutkan. Untuk informasi selengkapnya, lihat Unduhan yang dapat dilanjutkan.
Jika Anda ingin memberi otorisasi pihak ketiga untuk mengunduh objek dari bucket privat Anda, Anda dapat menggunakan kredensial akses sementara dari Security Token Service (STS) atau URL yang ditandatangani. Untuk informasi selengkapnya, lihat Berikan otorisasi pihak ketiga untuk mengunduh objek.
Jika Anda ingin mengunduh objek hanya ketika kondisi tertentu terpenuhi, Anda dapat menentukan kondisi untuk unduhan tersebut. Kesalahan akan dikembalikan jika kondisi tidak terpenuhi. Untuk informasi selengkapnya, lihat Unduhan bersyarat.