全部产品
Search
文档中心

Object Storage Service:Manajer Unggah File (Python SDK V2)

更新时间:Aug 02, 2025

Topik ini menjelaskan cara menggunakan modul Uploader baru di Python SDK V2 untuk mengunggah file.

Catatan

  • Kode contoh dalam topik ini menggunakan titik akhir publik untuk Wilayah China (Hangzhou). ID wilayah adalah cn-hangzhou. Jika Anda ingin mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang wilayah dan titik akhir yang didukung oleh OSS, lihat Wilayah dan Titik Akhir OSS.

  • Untuk melakukan unggahan, Anda memerlukan izin oss:PutObject. Untuk informasi lebih lanjut, lihat Memberikan Izin Kustom ke Pengguna RAM.

Definisi Metode

Pengenalan Manajer Unggah

Modul Uploader baru di Python SDK V2 menyediakan metode unggah terpadu yang mengabstraksi detail implementasi dasar untuk menyederhanakan proses unggahan file.

  • Uploader menggunakan metode unggah multi-bagian untuk membagi file atau aliran menjadi beberapa bagian lalu mengunggah bagian-bagian tersebut secara bersamaan. Proses ini meningkatkan kinerja unggahan.

  • Uploader juga mendukung fitur unggah yang dapat dilanjutkan. Selama proses unggah, Uploader mencatat status bagian yang telah selesai. Jika unggahan terganggu oleh masalah seperti kesalahan jaringan atau keluar program yang tidak terduga, Anda dapat melanjutkan unggahan dari titik pemberhentian yang tercatat.

Tabel berikut menjelaskan metode umum dari Uploader.

class Uploader:
  ...

def uploader(self, **kwargs) -> Uploader:
  ...

def upload_file(self, request: models.PutObjectRequest, filepath: str, **kwargs: Any) -> UploadResult:
  ...
  
def upload_from(self, request: models.PutObjectRequest, reader: IO[bytes], **kwargs: Any) -> UploadResult:
  ...

Parameter Permintaan

Parameter

Tipe

Deskripsi

request

PutObjectRequest

Parameter permintaan untuk mengunggah objek. Parameter ini sama dengan parameter untuk metode PutObject. Untuk informasi lebih lanjut, lihat PutObjectRequest

reader

IO[bytes]

Aliran data yang akan diunggah

filepath

str

Path file lokal

**kwargs

Any

(Opsional) Parameter apa pun. Tipe adalah kamus.

Parameter Respons

Tipe

Deskripsi

UploadResult

Parameter respons untuk mengunggah objek. Untuk informasi lebih lanjut, lihat UploadResult

Saat menggunakan client.uploader untuk menginisialisasi instance manajer unggah, Anda dapat menentukan opsi konfigurasi untuk menyesuaikan perilaku unggahan. Opsi ini juga dapat ditentukan untuk setiap pemanggilan API unggahan guna menyesuaikan perilaku untuk objek tertentu. Misalnya, Anda dapat menentukan ukuran bagian.

  • Tetapkan parameter konfigurasi untuk uploader

    uploader = client.uploader(part_size=10  * 1024 * 1024)
  • Tetapkan parameter konfigurasi untuk setiap permintaan unggahan

    result = uploader.upload_file(oss.PutObjectRequest(
            bucket="example_bucket",
            key="example_key",
        ),
        filepath="/local/dir/example",
        part_size=10 * 1024 * 1024,
    )

Tabel berikut menjelaskan opsi konfigurasi umum.

Parameter

Tipe

Deskripsi

part_size

int

Menentukan ukuran bagian. Nilai defaultnya adalah 6 MiB.

parallel_num

int

Menentukan jumlah tugas unggahan bersamaan. Nilai defaultnya adalah 3. Parameter ini membatasi konkurensi untuk satu panggilan, bukan konkurensi global.

leave_parts_on_error

bool

Menentukan apakah akan mempertahankan bagian yang diunggah ketika unggahan gagal. Secara default, bagian-bagian tersebut tidak dipertahankan.

enable_checkpoint

bool

Menentukan apakah akan mengaktifkan unggah yang dapat dilanjutkan. Secara default, fitur ini dinonaktifkan.

Catatan

Parameter enable_checkpoint hanya valid untuk metode upload_file. Metode upload_from tidak mendukung parameter ini.

checkpoint_dir

str

Menentukan path tempat file rekaman disimpan, misalnya, /local/dir/. Parameter ini hanya valid ketika enable_checkpoint diatur ke true.

Untuk definisi metode lengkap dari manajer unggah file, lihat Uploader.

Kode Contoh

Gunakan kode berikut untuk mengunggah file lokal ke bucket menggunakan manajer unggah.

import argparse
import alibabacloud_oss_v2 as oss

# Buat parser argumen baris perintah dan jelaskan tujuan skrip: contoh unggah file
parser = argparse.ArgumentParser(description="contoh unggah file")

# Tambahkan argumen baris perintah --region, yang menentukan wilayah tempat bucket berada. Ini adalah parameter yang diperlukan.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
# Tambahkan argumen baris perintah --bucket, yang menentukan nama bucket tempat file diunggah. Ini adalah parameter yang diperlukan.
parser.add_argument('--bucket', help='Nama bucket.', required=True)
# Tambahkan argumen baris perintah --endpoint, yang menentukan nama domain yang dapat digunakan layanan lain untuk mengakses OSS. Ini adalah parameter opsional.
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
# Tambahkan argumen baris perintah --key, yang menentukan kunci objek (file) di OSS. Ini adalah parameter yang diperlukan.
parser.add_argument('--key', help='Nama objek.', required=True)
# Tambahkan argumen baris perintah --file_path, yang menentukan path file lokal yang akan diunggah. Ini adalah parameter yang diperlukan, misalnya, "/Users/yourLocalPath/yourFileName".
parser.add_argument('--file_path', help='Path file unggahan.', required=True)

def main():
    # Parse argumen baris perintah untuk mendapatkan nilai yang diberikan pengguna.
    args = parser.parse_args()

    # Muat informasi otentikasi yang diperlukan untuk mengakses OSS dari variabel lingkungan untuk verifikasi identitas.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Buat objek konfigurasi menggunakan konfigurasi default SDK dan atur penyedia kredensial.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    
    # Atur properti region objek konfigurasi berdasarkan argumen baris perintah yang diberikan pengguna.
    cfg.region = args.region

    # Jika titik akhir kustom diberikan, perbarui properti endpoint dalam objek konfigurasi.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # Inisialisasi klien OSS menggunakan konfigurasi di atas untuk mempersiapkan interaksi dengan OSS.
    client = oss.Client(cfg)

    # Buat objek untuk mengunggah file.
    uploader = client.uploader()

    # Panggil metode untuk melakukan operasi unggah file.
    result = uploader.upload_file(
        oss.PutObjectRequest(
            bucket=args.bucket,  # Tentukan bucket tujuan.
            key=args.key,        # Tentukan nama file di OSS.
        ),
        filepath=args.file_path  # Tentukan lokasi file lokal.
    )

    # Cetak informasi tentang hasil unggahan, termasuk kode status, ID permintaan, dan Content-MD5.
    print(f'kode status: {result.status_code},'
          f' ID permintaan: {result.request_id},'
          f' content md5: {result.headers.get("Content-MD5")},'
          f' etag: {result.etag},'
          f' hash crc64: {result.hash_crc64},'
          f' ID versi: {result.version_id},'
          f' waktu server: {result.headers.get("x-oss-server-time")},'
          )

# Saat skrip ini dieksekusi langsung, panggil fungsi utama untuk memulai logika pemrosesan.
if __name__ == "__main__":
    main()  # Titik masuk skrip. Alur program dimulai dari sini.

Skenario

Gunakan manajer unggah untuk mengaktifkan unggah yang dapat dilanjutkan

Gunakan kode berikut untuk mengaktifkan unggah yang dapat dilanjutkan.

import argparse
import alibabacloud_oss_v2 as oss

# Buat parser argumen baris perintah dan jelaskan tujuan skrip: contoh unggah file
parser = argparse.ArgumentParser(description="contoh unggah file")

# Tambahkan argumen baris perintah --region, yang menentukan wilayah tempat bucket berada. Ini adalah parameter yang diperlukan.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
# Tambahkan argumen baris perintah --bucket, yang menentukan nama bucket tempat file diunggah. Ini adalah parameter yang diperlukan.
parser.add_argument('--bucket', help='Nama bucket.', required=True)
# Tambahkan argumen baris perintah --endpoint, yang menentukan nama domain yang dapat digunakan layanan lain untuk mengakses OSS. Ini adalah parameter opsional.
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
# Tambahkan argumen baris perintah --key, yang menentukan kunci objek (file) di OSS. Ini adalah parameter yang diperlukan.
parser.add_argument('--key', help='Nama objek.', required=True)
# Tambahkan argumen baris perintah --file_path, yang menentukan path file lokal yang akan diunggah. Ini adalah parameter yang diperlukan, misalnya, "/Users/yourLocalPath/yourFileName".
parser.add_argument('--file_path', help='Path file unggahan.', required=True)

def main():
    # Parse argumen baris perintah untuk mendapatkan nilai yang diberikan pengguna.
    args = parser.parse_args()

    # Muat informasi otentikasi yang diperlukan untuk mengakses OSS dari variabel lingkungan untuk verifikasi identitas.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Buat objek konfigurasi menggunakan konfigurasi default SDK dan atur penyedia kredensial.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    
    # Atur properti region objek konfigurasi berdasarkan argumen baris perintah yang diberikan pengguna.
    cfg.region = args.region

    # Jika titik akhir kustom diberikan, perbarui properti endpoint dalam objek konfigurasi.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # Inisialisasi klien OSS menggunakan konfigurasi di atas untuk mempersiapkan interaksi dengan OSS.
    client = oss.Client(cfg)

    # Buat objek untuk mengunggah file, aktifkan unggah yang dapat dilanjutkan, dan tentukan path untuk menyimpan file rekaman titik pemberhentian.
    uploader = client.uploader(enable_checkpoint=True, checkpoint_dir="/Users/yourLocalPath/checkpoint/")

    # Panggil metode untuk melakukan operasi unggah file.
    result = uploader.upload_file(
        oss.PutObjectRequest(
            bucket=args.bucket,  # Tentukan bucket tujuan.
            key=args.key,        # Tentukan nama file di OSS.
        ),
        filepath=args.file_path  # Tentukan lokasi file lokal.
    )

    # Cetak informasi tentang hasil unggahan, termasuk kode status, ID permintaan, dan Content-MD5.
    print(f'kode status: {result.status_code},'
          f' ID permintaan: {result.request_id},'
          f' content md5: {result.headers.get("Content-MD5")},'
          f' etag: {result.etag},'
          f' hash crc64: {result.hash_crc64},'
          f' ID versi: {result.version_id},'
          f' waktu server: {result.headers.get("x-oss-server-time")},'
          )

# Saat skrip ini dieksekusi langsung, panggil fungsi utama untuk memulai logika pemrosesan.
if __name__ == "__main__":
    main()  # Titik masuk skrip. Alur program dimulai dari sini.

Gunakan manajer unggah untuk mengunggah aliran file lokal

Gunakan kode berikut untuk mengunggah aliran file lokal menggunakan manajer unggah.

import argparse
import alibabacloud_oss_v2 as oss

# Buat parser argumen baris perintah dan jelaskan tujuan skrip: contoh unggah dari file
parser = argparse.ArgumentParser(description="contoh unggah dari file")

# Tambahkan argumen baris perintah --region, yang menentukan wilayah tempat bucket berada. Ini adalah parameter yang diperlukan.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
# Tambahkan argumen baris perintah --bucket, yang menentukan nama bucket tempat file diunggah. Ini adalah parameter yang diperlukan.
parser.add_argument('--bucket', help='Nama bucket.', required=True)
# Tambahkan argumen baris perintah --endpoint, yang menentukan nama domain yang dapat digunakan layanan lain untuk mengakses OSS. Ini adalah parameter opsional.
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
# Tambahkan argumen baris perintah --key, yang menentukan kunci objek (file) di OSS. Ini adalah parameter yang diperlukan.
parser.add_argument('--key', help='Nama objek.', required=True)
# Tambahkan argumen baris perintah --file_path, yang menentukan path file lokal yang akan diunggah. Ini adalah parameter yang diperlukan, misalnya, "/Users/yourLocalPath/yourFileName".
parser.add_argument('--file_path', help='Path file unggahan.', required=True)

def main():
    # Parse argumen baris perintah untuk mendapatkan nilai yang diberikan pengguna.
    args = parser.parse_args()

    # Muat informasi otentikasi yang diperlukan untuk mengakses OSS dari variabel lingkungan untuk verifikasi identitas.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Buat objek konfigurasi menggunakan konfigurasi default SDK dan atur penyedia kredensial.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    
    # Atur properti region objek konfigurasi berdasarkan argumen baris perintah yang diberikan pengguna.
    cfg.region = args.region

    # Jika titik akhir kustom diberikan, perbarui properti endpoint dalam objek konfigurasi.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # Inisialisasi klien OSS menggunakan konfigurasi di atas untuk mempersiapkan interaksi dengan OSS.
    client = oss.Client(cfg)

    # Buat objek untuk mengunggah file.
    uploader = client.uploader()

    # Buka file lokal untuk dibaca dalam mode biner.
    with open(file=args.file_path, mode='rb') as f:
        # Panggil metode untuk melakukan operasi unggah file.
        result = uploader.upload_from(
            oss.PutObjectRequest(
                bucket=args.bucket,  # Tentukan bucket tujuan.
                key=args.key,        # Tentukan nama file di OSS.
            ),
            reader=f  # Masukkan pembaca file.
        )

        # Cetak informasi tentang hasil unggahan, termasuk kode status, ID permintaan, dan Content-MD5.
        print(f'kode status: {result.status_code},'
              f' ID permintaan: {result.request_id},'
              f' content md5: {result.headers.get("Content-MD5")},'
              f' etag: {result.etag},'
              f' hash crc64: {result.hash_crc64},'
              f' ID versi: {result.version_id},'
              f' waktu server: {result.headers.get("x-oss-server-time")},'
              )

# Saat skrip ini dieksekusi langsung, panggil fungsi utama untuk memulai logika pemrosesan.
if __name__ == "__main__":
    main()  # Titik masuk skrip. Alur program dimulai dari sini.

Gunakan manajer unggah untuk menetapkan ukuran bagian dan konkurensi

Gunakan kode berikut untuk menentukan ukuran bagian dan konkurensi.

import argparse
import alibabacloud_oss_v2 as oss

# Buat parser argumen baris perintah dan jelaskan tujuan skrip: contoh unggah file
parser = argparse.ArgumentParser(description="contoh unggah file")

# Tambahkan argumen baris perintah --region, yang menentukan wilayah tempat bucket berada. Ini adalah parameter yang diperlukan.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
# Tambahkan argumen baris perintah --bucket, yang menentukan nama bucket tempat file diunggah. Ini adalah parameter yang diperlukan.
parser.add_argument('--bucket', help='Nama bucket.', required=True)
# Tambahkan argumen baris perintah --endpoint, yang menentukan nama domain yang dapat digunakan layanan lain untuk mengakses OSS. Ini adalah parameter opsional.
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
# Tambahkan argumen baris perintah --key, yang menentukan kunci objek (file) di OSS. Ini adalah parameter yang diperlukan.
parser.add_argument('--key', help='Nama objek.', required=True)
# Tambahkan argumen baris perintah --file_path, yang menentukan path file lokal yang akan diunggah. Ini adalah parameter yang diperlukan, misalnya, "/Users/yourLocalPath/yourFileName".
parser.add_argument('--file_path', help='Path file unggahan.', required=True)

def main():
    # Parse argumen baris perintah untuk mendapatkan nilai yang diberikan pengguna.
    args = parser.parse_args()

    # Muat informasi otentikasi yang diperlukan untuk mengakses OSS dari variabel lingkungan untuk verifikasi identitas.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Buat objek konfigurasi menggunakan konfigurasi default SDK dan atur penyedia kredensial.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    
    # Atur properti region objek konfigurasi berdasarkan argumen baris perintah yang diberikan pengguna.
    cfg.region = args.region

    # Jika titik akhir kustom diberikan, perbarui properti endpoint dalam objek konfigurasi.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # Inisialisasi klien OSS menggunakan konfigurasi di atas untuk mempersiapkan interaksi dengan OSS.
    client = oss.Client(cfg)

    # Buat objek untuk mengunggah file dan tetapkan ukuran bagian dan konkurensi.
    uploader = client.uploader(
        part_size=100 * 1024,  # Tetapkan ukuran bagian menjadi 100 KB.
        parallel_num=5,        # Tetapkan konkurensi menjadi 5.
        leave_parts_on_error=True  # Pertahankan bagian yang diunggah jika terjadi kesalahan.
    )

    # Panggil metode untuk melakukan operasi unggah file.
    result = uploader.upload_file(
        oss.PutObjectRequest(
            bucket=args.bucket,  # Tentukan bucket tujuan.
            key=args.key,        # Tentukan nama file di OSS.
        ),
        filepath=args.file_path  # Tentukan lokasi file lokal.
    )

    # Cetak informasi tentang hasil unggahan, termasuk kode status, ID permintaan, dan Content-MD5.
    print(f'kode status: {result.status_code},'
          f' ID permintaan: {result.request_id},'
          f' content md5: {result.headers.get("Content-MD5")},'
          f' etag: {result.etag},'
          f' hash crc64: {result.hash_crc64},'
          f' ID versi: {result.version_id},'
          f' waktu server: {result.headers.get("x-oss-server-time")},'
          )

# Saat skrip ini dieksekusi langsung, panggil fungsi utama untuk memulai logika pemrosesan.
if __name__ == "__main__":
    main()  # Titik masuk skrip. Alur program dimulai dari sini.

Gunakan manajer unggah untuk mengonfigurasi callback unggahan

Jika Anda ingin memberi tahu server aplikasi setelah file diunggah, gunakan kode contoh berikut.

import argparse
import base64
import alibabacloud_oss_v2 as oss

# Buat parser argumen baris perintah dan jelaskan tujuan skrip: contoh unggah file
parser = argparse.ArgumentParser(description="contoh unggah file")

# Tambahkan argumen baris perintah --region, yang menentukan wilayah tempat bucket berada. Ini adalah parameter yang diperlukan.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
# Tambahkan argumen baris perintah --bucket, yang menentukan nama bucket tempat file diunggah. Ini adalah parameter yang diperlukan.
parser.add_argument('--bucket', help='Nama bucket.', required=True)
# Tambahkan argumen baris perintah --endpoint, yang menentukan nama domain yang dapat digunakan layanan lain untuk mengakses OSS. Ini adalah parameter opsional.
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
# Tambahkan argumen baris perintah --key, yang menentukan kunci objek (file) di OSS. Ini adalah parameter yang diperlukan.
parser.add_argument('--key', help='Nama objek.', required=True)
# Tambahkan argumen baris perintah --file_path, yang menentukan path file lokal yang akan diunggah. Ini adalah parameter yang diperlukan.
parser.add_argument('--file_path', help='Path file unggahan.', required=True)

def main():
    # Parse argumen baris perintah untuk mendapatkan nilai yang diberikan pengguna.
    args = parser.parse_args()

    # Muat informasi otentikasi yang diperlukan untuk mengakses OSS dari variabel lingkungan untuk verifikasi identitas.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Buat objek konfigurasi menggunakan konfigurasi default SDK dan atur penyedia kredensial.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # Atur properti region objek konfigurasi berdasarkan argumen baris perintah yang diberikan pengguna.
    cfg.region = args.region

    # Jika titik akhir kustom diberikan, perbarui properti endpoint dalam objek konfigurasi.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # Inisialisasi klien OSS menggunakan konfigurasi di atas untuk mempersiapkan interaksi dengan OSS.
    client = oss.Client(cfg)

    # Buat objek uploader untuk mengunggah file.
    uploader = client.uploader()

    # Tentukan alamat webhook.
    call_back_url = "http://www.example.com/callback"
    # Konstruksi parameter callback: tentukan alamat webhook dan badan permintaan untuk callback, dan enkode dalam Base64.
    callback=base64.b64encode(str('{\"callbackUrl\":\"' + call_back_url + '\",\"callbackBody\":\"bucket=${bucket}&object=${object}&my_var_1=${x:var1}&my_var_2=${x:var2}\"}').encode()).decode()
    # Konstruksi variabel kustom (callback-var) dan enkode dalam Base64.
    callback_var=base64.b64encode('{\"x:var1\":\"value1\",\"x:var2\":\"value2\"}'.encode()).decode()

    # Panggil metode untuk melakukan operasi unggah file.
    result = uploader.upload_file(
        oss.PutObjectRequest(
            bucket=args.bucket,  # Tentukan bucket tujuan.
            key=args.key,        # Tentukan nama file di OSS.
            callback=callback,
            callback_var=callback_var,
        ),
        filepath=args.file_path,  # Tentukan lokasi file lokal.
    )

    # Cetak informasi tentang hasil unggahan, termasuk kode status, ID permintaan, dan Content-MD5.
    print(f'kode status: {result.status_code},'
          f' ID permintaan: {result.request_id},'
          f' content md5: {result.headers.get("Content-MD5")},'
          f' etag: {result.etag},'
          f' hash crc64: {result.hash_crc64},'
          f' ID versi: {result.version_id},'
          f' waktu server: {result.headers.get("x-oss-server-time")},'
          )

# Saat skrip ini dieksekusi langsung, panggil fungsi utama untuk memulai logika pemrosesan.
if __name__ == "__main__":
    main()  # Titik masuk skrip. Alur program dimulai dari sini.

Referensi