Upload sederhana menggunakan metode put_object untuk mengunggah satu file (objek). Metode ini mendukung pengunggahan string, byte, karakter Unicode, aliran jaringan, dan file lokal.
Catatan
Pada topik ini, digunakan titik akhir publik wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lain 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, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient dengan nama domain kustom atau Security Token Service (STS), lihat Inisialisasi.
Jika file dengan nama yang sama sudah ada di bucket dan Anda memiliki izin akses yang diperlukan, file yang baru diunggah akan menimpa file yang sudah ada.
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.
Parameter umum
Tabel berikut menjelaskan parameter umum yang digunakan untuk mengunggah file.
Parameter | Deskripsi |
bucket_name | Nama bucket. Nama bucket harus mengikuti aturan berikut:
|
object_name | Jalur lengkap objek. Jalur lengkap tidak boleh mencakup nama bucket. Nama objek harus mengikuti aturan berikut:
|
Unggah string
Kode berikut menunjukkan cara mengunggah string ke file exampleobject.txt di bucket examplebucket.
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan Endpoint untuk wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan informasi wilayah yang sesuai dengan Endpoint, misalnya cn-hangzhou. Perhatikan bahwa 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.
# Untuk menyetel kelas penyimpanan (x-oss-storage-class) dan izin akses (x-oss-object-acl) saat mengunggah file, setel header terkait di put_object.
# headers = dict()
# headers["x-oss-storage-class"] = "Standard"
# headers["x-oss-object-acl"] = oss2.OBJECT_ACL_PRIVATE
# Tentukan jalur lengkap objek dan string. Jalur lengkap tidak boleh mencakup nama bucket.
# result = bucket.put_object('exampleobject.txt', 'Hello OSS', headers=headers)
result = bucket.put_object('exampleobject.txt', 'Hello OSS')
# Kode status HTTP.
print('http status: {0}'.format(result.status))
# ID permintaan. ID permintaan secara unik mengidentifikasi permintaan ini. Tambahkan parameter ini ke log program Anda agar lebih mudah melakukan troubleshooting.
print('request_id: {0}'.format(result.request_id))
# ETag adalah properti khusus dari nilai kembali metode put_object. ETag mengidentifikasi konten suatu objek.
print('ETag: {0}'.format(result.etag))
# Header respons HTTP.
print('date: {0}'.format(result.headers['date']))Unggah byte
Kode berikut menunjukkan cara mengunggah byte ke file exampleobject.txt di bucket examplebucket.
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan Endpoint untuk wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan informasi wilayah yang sesuai dengan Endpoint, misalnya cn-hangzhou. Perhatikan bahwa parameter ini wajib untuk tanda tangan v4.
region = "cn-hangzhou"
# Ganti yourBucketName dengan nama bucket Anda.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# Tentukan jalur lengkap objek dan konten byte. Jalur lengkap tidak boleh mencakup nama bucket.
bucket.put_object('exampleobject.txt', b'Hello OSS')Unggah karakter Unicode
Kode berikut menunjukkan cara mengunggah karakter Unicode ke file exampleobject.txt di bucket examplebucket. Saat mengunggah karakter Unicode, OSS secara otomatis mengonversinya menjadi byte berkode UTF-8 sebelum diunggah.
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan Endpoint untuk wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan informasi wilayah yang sesuai dengan Endpoint, misalnya cn-hangzhou. Perhatikan bahwa parameter ini wajib untuk tanda tangan v4.
region = "cn-hangzhou"
# Ganti yourBucketName dengan nama bucket Anda.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# Tentukan jalur lengkap objek dan karakter Unicode. Jalur lengkap tidak boleh mencakup nama bucket.
bucket.put_object('exampleobject.txt', u'Hello OSS')Unggah aliran jaringan
Kode berikut menunjukkan cara mengunggah aliran jaringan ke file exampleobject.txt di bucket examplebucket. OSS memperlakukan aliran jaringan sebagai objek iterabel dan mengunggahnya menggunakan chunked encoding.
# -*- coding: utf-8 -*-
import oss2
import requests
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan Endpoint untuk wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan informasi wilayah yang sesuai dengan Endpoint, misalnya cn-hangzhou. Perhatikan bahwa parameter ini wajib untuk tanda tangan v4.
region = "cn-hangzhou"
# Ganti yourBucketName dengan nama bucket Anda.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# requests.get mengembalikan objek iterabel. SDK Python kemudian mengunggah objek tersebut menggunakan chunked encoding.
# Tentukan URL aliran jaringan.
input = requests.get('http://www.aliyun.com')
# Tentukan jalur lengkap objek. Jalur lengkap tidak boleh mencakup nama bucket.
bucket.put_object('exampleobject.txt', input)Unggah file lokal
Kode berikut menunjukkan cara mengunggah file lokal examplefile.txt ke bucket examplebucket dan menyimpannya sebagai exampleobject.txt.
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan Endpoint untuk wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan informasi wilayah yang sesuai dengan Endpoint, misalnya cn-hangzhou. Perhatikan bahwa parameter ini wajib untuk tanda tangan v4.
region = "cn-hangzhou"
# Tentukan nama bucket, misalnya examplebucket.
bucketName = "examplebucket"
# Buat instans bucket dan tentukan nama bucket serta informasi wilayah.
bucket = oss2.Bucket(auth, endpoint, bucketName, region=region)
# Jalur lengkap file lokal.
local_file_path = 'D:\\localpath\\examplefile.txt'
# Tentukan jalur lengkap objek. Jalur lengkap tidak boleh mencakup nama bucket. Misalnya, exampleobject.txt.
objectName = 'exampleobject.txt'
# Gunakan metode put_object_from_file untuk mengunggah file lokal ke OSS.
bucket.put_object_from_file(objectName, local_file_path)Jika Anda ingin mengunggah file lokal mulai dari posisi byte tertentu, gunakan metode seek() untuk melompat ke posisi target. Kode berikut menunjukkan cara memulai pengunggahan dari byte ke-1000.
# -*- coding: utf-8 -*-
import oss2
import os
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan Endpoint untuk wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan informasi wilayah yang sesuai dengan Endpoint, misalnya cn-hangzhou. Perhatikan bahwa parameter ini wajib untuk tanda tangan v4.
region = "cn-hangzhou"
# Ganti yourBucketName dengan nama bucket, misalnya examplebucket.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# Buka file dalam mode biner.
# Tentukan jalur lengkap file lokal. Jika Anda tidak menentukan jalur lokal, file akan diunggah dari jalur lokal proyek yang berisi program contoh.
with open('D:\\localpath\\examplefile.txt', 'rb') as fileobj:
# Metode seek() menentukan untuk mulai membaca atau menulis dari byte ke-1000. Pengunggahan dimulai dari byte ke-1000 yang ditentukan dan berlanjut hingga akhir file.
fileobj.seek(1000, os.SEEK_SET)
# Metode tell() mengembalikan posisi saat ini.
current = fileobj.tell()
# Tentukan jalur lengkap objek. Jalur lengkap tidak boleh mencakup nama bucket.
bucket.put_object('exampleobject.txt', fileobj)FAQ
Bagaimana cara mendapatkan URL file setelah diunggah?
Setelah mengunggah file menggunakan kit pengembangan perangkat lunak (SDK), URL file tidak dikembalikan dalam hasilnya. Untuk informasi selengkapnya tentang cara mendapatkan URL file, lihat Gunakan URL yang ditandatangani untuk mengunduh atau melihat pratinjau file.
Bagaimana cara memeriksa apakah ukuran file yang diunggah sama dengan ukuran file lokal?
Secara default, OSS mengaktifkan Pemeriksaan redundansi siklik (CRC) untuk validasi data selama pengunggahan dan pengunduhan file guna memastikan integritas data. Jika ukuran file yang diunggah berbeda dari ukuran file lokal, kesalahan InconsistentError akan dilaporkan.
Namun, proses validasi data CRC melibatkan transmisi dan perhitungan secara bersamaan, yang dapat mengurangi kecepatan pengunggahan. Jika kecepatan transmisi menjadi prioritas dalam skenario bisnis Anda, Anda dapat menonaktifkan validasi CRC menggunakan kode berikut.
# -*- coding: utf-8 -*- import oss2 import os from oss2.credentials import EnvironmentVariableCredentialsProvider # Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel. auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # Tentukan Endpoint untuk wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # Tentukan informasi wilayah yang sesuai dengan Endpoint, misalnya cn-hangzhou. Perhatikan bahwa parameter ini wajib untuk tanda tangan v4. region = "cn-hangzhou" # Ganti yourBucketName dengan nama bucket, dan setel enable_crc=False untuk menonaktifkan validasi data CRC. bucket = oss2.Bucket(auth, endpoint, "yourBucketName", enable_crc=False, region=region)
Referensi
Untuk kode contoh lengkap upload sederhana, lihat contoh GitHub.
Untuk informasi selengkapnya mengenai Operasi API untuk upload sederhana, lihat PutObject.