Topik ini menjelaskan cara dengan cepat mengunduh objek dari bucket Object Storage Service (OSS) ke perangkat lokal.
Catatan penggunaan
Kode contoh dalam topik ini menggunakan ID wilayah cn-hangzhou dari wilayah Hangzhou, Tiongkok. Secara default, titik akhir publik digunakan untuk mengakses sumber daya di bucket. Jika Anda ingin mengakses sumber daya di bucket dari layanan Alibaba Cloud lainnya di wilayah yang sama dengan bucket tersebut, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang wilayah dan titik akhir yang didukung oleh OSS, lihat Wilayah dan Titik Akhir.
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 | Aksi | 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. |
Definisi metode
get_object(request: GetObjectRequest, **kwargs) → GetObjectResultParameter permintaan
Parameter | Tipe | Deskripsi |
request | GetObjectRequest | Parameter permintaan. Untuk informasi lebih lanjut, lihat GetObjectRequest |
Parameter respons
Tipe | Deskripsi |
GetObjectResult | Nilai kembali. Untuk detailnya, lihat GetObjectResult |
Untuk definisi lengkap metode unduhan sederhana, lihat get_object.
Kode contoh
Kode contoh berikut mengunduh objek ke perangkat lokal:
import argparse
import alibabacloud_oss_v2 as oss
import os
# Buat parser parameter baris perintah.
parser = argparse.ArgumentParser(description="contoh unduh objek")
# Tentukan parameter --region untuk menunjukkan wilayah tempat bucket berada. Parameter ini wajib.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
# Tentukan parameter --bucket untuk menunjukkan nama bucket. Parameter baris perintah ini wajib.
parser.add_argument('--bucket', help='Nama bucket.', required=True)
# Tentukan parameter --endpoint untuk menunjukkan titik akhir wilayah tempat bucket berada. Parameter ini opsional.
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
# Tentukan parameter --key untuk menunjukkan nama objek. Parameter ini wajib.
parser.add_argument('--key', help='Nama objek.', required=True)
def main():
# Parse parameter baris perintah.
args = parser.parse_args()
# Dapatkan kredensial akses dari variabel lingkungan untuk otentikasi.
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Muat konfigurasi default SDK dan tentukan penyedia kredensial.
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
# Tentukan wilayah tempat bucket berada.
cfg.region = args.region
# Jika titik akhir disediakan, tentukan titik akhir dalam objek konfigurasi.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# Gunakan konfigurasi untuk membuat instance OSSClient.
client = oss.Client(cfg)
# Eksekusi permintaan untuk mengunduh objek, dan tentukan nama bucket dan nama objek.
result = client.get_object(oss.GetObjectRequest(
bucket=args.bucket, # Tentukan nama bucket.
key=args.key, # Tentukan kunci objek.
))
# Tampilkan respons 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' pengkodean 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 tambahan 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"Objek telah dibaca. Panjang data: {len(data)} byte")
path = "./get-object-sample.txt"
with open(path, 'wb') as f:
f.write(data)
print(f"Objek telah diunduh dan disimpan ke jalur lokal: {path}")
# # ========== Metode 2: Baca objek dalam blok ==========
# 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 256KB (Anda dapat menyesuaikan 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"Objek telah diunduh dan disimpan ke jalur lokal: {chunk_path}")
# Panggil fungsi utama saat skrip dijalankan langsung.
if __name__ == "__main__":
main() # Titik masuk skrip. Saat skrip dijalankan langsung, fungsi utama dipanggil.Skenario umum
Unduh objek secara batch ke file lokal
Referensi
Untuk kode contoh lengkap untuk unduhan sederhana, lihat get_object.py dan get_object_to_file.py.