Topik ini menjelaskan cara menggunakan metode unduhan sederhana untuk mengunduh objek dari bucket ke file lokal. Metode ini bersifat langsung dan ideal untuk mengunduh file dari cloud ke perangkat lokal secara cepat.
Catatan penggunaan
Kode contoh dalam topik ini menggunakan cn-hangzhou, ID wilayah China (Hangzhou), sebagai contoh. Secara default, digunakan endpoint publik. Jika Anda ingin mengakses OSS dari produk Alibaba Cloud lainnya di wilayah yang sama, gunakan endpoint internal. Untuk informasi selengkapnya mengenai wilayah dan endpoint yang didukung oleh OSS, lihat Wilayah dan endpoint.
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 kebijakan RAM atau Kebijakan Bucket.
|
API |
Action |
Deskripsi |
|
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. |
Definisi metode
get_object(request: GetObjectRequest, **kwargs) → GetObjectResultParameter permintaan
Parameter | Tipe | Deskripsi |
request | GetObjectRequest | Parameter permintaan. Untuk informasi selengkapnya, lihat GetObjectRequest |
Nilai kembali
Tipe | Deskripsi |
GetObjectResult | Nilai kembali. Untuk informasi selengkapnya, lihat GetObjectResult |
Untuk definisi lengkap metode unduhan sederhana, lihat get_object.
Kode contoh
Anda dapat menggunakan kode berikut untuk mengunduh objek dari bucket ke file lokal.
import argparse
import alibabacloud_oss_v2 as oss
import os
# Buat parser argumen command-line.
parser = argparse.ArgumentParser(description="contoh get object")
# Tambahkan argumen command-line --region untuk menentukan wilayah tempat bucket berada. Argumen ini wajib.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
# Tambahkan argumen command-line --bucket untuk menentukan nama bucket. Argumen ini wajib.
parser.add_argument('--bucket', help='Nama bucket.', required=True)
# Tambahkan argumen command-line --endpoint untuk menentukan nama domain yang dapat digunakan layanan lain untuk mengakses OSS. Argumen ini opsional.
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
# Tambahkan argumen command-line --key untuk menentukan nama objek. Argumen ini wajib.
parser.add_argument('--key', help='Nama objek.', required=True)
def main():
# Parsing argumen command-line.
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 telah dikonfigurasi untuk membuat client OSS.
client = oss.Client(cfg)
# Eksekusi 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' kedaluwarsa: {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' kedaluwarsa: {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 telah dibaca. Panjang data: {len(data)} byte")
path = "./get-object-sample.txt"
with open(path, 'wb') as f:
f.write(data)
print(f"File telah 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 telah 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.Skenario
Referensi
Untuk kode contoh lengkap unduhan file sederhana, lihat get_object.py dan get_object_to_file.py.