All Products
Search
Document Center

Object Storage Service:Unggah file (Python SDK V1)

Last Updated:Nov 29, 2025

Topik ini menjelaskan cara mengunggah objek ke bucket yang telah diaktifkan fitur versioning menggunakan unggah simple, unggah append, atau unggah multi-bagian.

Catatan penggunaan

  • Pada topik ini, digunakan titik akhir publik wilayah China (Hangzhou). Jika Anda ingin mengakses OSS dari layanan Alibaba Cloud lainnya 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, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi selengkapnya mengenai cara mengonfigurasi kredensial akses, lihat Konfigurasikan kredensial akses menggunakan OSS SDK untuk Python 1.0.

  • Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Inisialisasi.

  • Untuk mengunggah file, Anda harus memiliki izin oss:PutObject. Untuk informasi selengkapnya, lihat Berikan kebijakan akses kustom kepada Pengguna RAM.

Simple upload

Pada bucket yang telah diaktifkan fitur versioning, OSS secara otomatis menghasilkan ID versi unik untuk setiap objek yang baru ditambahkan dan mengembalikan ID tersebut dalam header respons x-oss-version-id. Pada bucket yang telah disuspensi fitur versioning-nya, ID versi objek yang baru ditambahkan adalah "null". Jika Anda mengunggah objek dengan nama yang sama, objek baru akan menimpa objek sebelumnya. OSS memastikan hanya satu versi objek yang dapat memiliki ID versi "null".

Kode berikut menunjukkan cara melakukan simple upload:

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan wilayah tempat titik akhir berada, seperti cn-hangzhou. Catatan: Parameter ini wajib untuk tanda tangan V4.
region = "cn-hangzhou"

# Ganti yourBucketName dengan nama bucket Anda.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

# Unggah file.
result = bucket.put_object('yourObjectName', 'content of object')
# Kode status HTTP.
print('http response code: {0}'.format(result.status))
# Lihat ID versi objek yang diunggah.
print('put object version:', result.versionid)

Append upload

Pada bucket yang telah diaktifkan fitur versioning, Anda hanya dapat melakukan operasi append (AppendObject) pada versi terkini dari objek yang dapat ditambahkan. Anda tidak dapat melakukan operasi AppendObject pada versi sebelumnya dari objek yang dapat ditambahkan.

Catatan
  • Saat Anda melakukan operasi AppendObject pada versi terkini dari objek yang dapat ditambahkan, OSS tidak membuat versi sebelumnya untuk objek tersebut.

  • Saat Anda melakukan operasi PutObject atau DeleteObject pada versi terkini dari objek yang dapat ditambahkan, OSS menyimpan versi terkini tersebut sebagai versi sebelumnya. Anda tidak lagi dapat menambahkan data ke objek ini.

  • Anda tidak dapat melakukan operasi AppendObject pada versi terkini dari objek yang tidak dapat ditambahkan, seperti objek normal atau penanda hapus.

Kode berikut menunjukkan cara melakukan append upload:

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan wilayah tempat titik akhir berada, seperti cn-hangzhou. Catatan: Parameter ini wajib untuk tanda tangan V4.
region = "cn-hangzhou"

# Ganti yourBucketName dengan nama bucket Anda.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

# Atur posisi append (parameter Position) ke 0 untuk unggahan pertama.
result = bucket.append_object('yourObjectName', 0, 'content of first append')
# Lihat ID versi objek yang ditambahkan datanya.
print('append object versionid:', result.versionid)
# Jika ini bukan operasi append pertama, Anda dapat memperoleh posisi append dari metode bucket.head_object atau properti next_position pada nilai kembali operasi append sebelumnya.
bucket.append_object('yourObjectName', result.next_position, 'content of second append')

Multipart upload

Pada bucket yang telah diaktifkan fitur versioning, saat Anda memanggil operasi API CompleteMultipartUpload untuk menyelesaikan unggah multi-bagian, OSS menghasilkan ID versi unik untuk keseluruhan objek dan mengembalikan ID tersebut dalam header respons x-oss-version-id.

Kode berikut menunjukkan cara melakukan multipart upload:

# -*- coding: utf-8 -*-
import os
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2 import SizedFileAdapter, determine_part_size
from oss2.models import PartInfo
# Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan wilayah tempat titik akhir berada, seperti cn-hangzhou. Catatan: Parameter ini wajib untuk tanda tangan V4.
region = "cn-hangzhou"

# Ganti yourBucketName dengan nama bucket Anda.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

key = 'yourObjectName'
filename = 'yourLocalFile'

total_size = os.path.getsize(filename)
# Metode determine_part_size digunakan untuk menentukan ukuran bagian.
part_size = determine_part_size(total_size, preferred_size=100 * 1024)

# Inisialisasi unggah multi-bagian.
upload_id = bucket.init_multipart_upload(key).upload_id
parts = []

# Unggah bagian satu per satu.
with open(filename, 'rb') as fileobj:
    part_number = 1
    offset = 0
    while offset < total_size:
        num_to_upload = min(part_size, total_size - offset)
    # Metode SizedFileAdapter(fileobj, size) menghasilkan objek file baru dan menghitung ulang posisi awal untuk menambahkan data.
        result = bucket.upload_part(key, upload_id, part_number,
                                    SizedFileAdapter(fileobj, num_to_upload))
        parts.append(PartInfo(part_number, result.etag))

        offset += num_to_upload
        part_number += 1

# Selesaikan unggah multi-bagian.
result = bucket.complete_multipart_upload(key, upload_id, parts)
# Lihat versionid file yang diunggah dalam tanggapan.
print('result.versionid:', result.versionid)


# Verifikasi unggah multi-bagian.
with open(filename, 'rb') as fileobj:
    assert bucket.get_object(key).read() == fileobj.read()

Referensi

  • Untuk informasi selengkapnya mengenai operasi API untuk simple upload, lihat PutObject.

  • Untuk informasi selengkapnya mengenai operasi API untuk append upload, lihat AppendObject.

  • Untuk informasi selengkapnya mengenai operasi API untuk multipart upload, lihat CompleteMultipartUpload.