All Products
Search
Document Center

ApsaraVideo VOD:Unggah file menggunakan Python SDK

Last Updated:Jun 21, 2026

Topik ini menyediakan contoh terperinci tentang cara menggunakan SDK unggah sisi server untuk Python guna mengunggah berbagai file media ke ApsaraVideo VOD.

Ikhtisar

SDK unggah Python mengikuti proses umum SDK sisi server ApsaraVideo VOD. Untuk informasi lebih lanjut, lihat Proses unggah. Langkah-langkah dasar penggunaan SDK unggah Python adalah sebagai berikut:

  1. Penuhi prasyaratnya. Untuk informasi lebih lanjut, lihat Prasyarat.

  2. Integrasikan SDK unggah Python. Untuk informasi lebih lanjut, lihat Integrasikan Python upload SDK.

  3. Implementasikan logika unggah. Langkah ini mencakup konfigurasi informasi unggah.

  4. Titik akhir default untuk SDK unggah Python adalah cn-shanghai (Shanghai). Untuk mengunggah file media ke wilayah lain, Anda dapat menentukan wilayah tersebut menggunakan ApiRegion dalam AliyunVodUploader.py. Untuk informasi lebih lanjut tentang titik akhir yang didukung oleh ApsaraVideo VOD, lihat Endpoints.

    Contoh berikut menunjukkan cara mengatur wilayah unggah ke cn-beijing (Beijing):

    self.setApiRegion('cn-beijing')

Prasyarat

  • ApsaraVideo VOD telah diaktifkan. Untuk informasi lebih lanjut, lihat Aktifkan ApsaraVideo VOD.

  • Pengaturan sistem yang diperlukan untuk unggah, termasuk jalur penyimpanan di wilayah tertentu dan pengaturan callback, telah dikonfigurasi. Untuk informasi lebih lanjut, lihat Kelola bucket penyimpanan dan Konfigurasi callback.

  • RAM user telah dibuat dan digunakan untuk mengakses ApsaraVideo VOD. Untuk mencegah risiko keamanan akibat kebocoran pasangan AccessKey Akun Alibaba Cloud Anda, kami menyarankan agar Anda membuat RAM user dan memberikan izin yang diperlukan untuk mengakses ApsaraVideo VOD kepada RAM user tersebut. Kemudian, Anda dapat menggunakan AccessKey pair RAM user tersebut untuk mengakses ApsaraVideo VOD. Untuk informasi lebih lanjut, lihat Buat RAM user dan berikan izin.

  • Konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET. Untuk informasi lebih lanjut, lihat Konfigurasi variabel lingkungan di Linux, macOS, dan Windows.

    Penting
    • Pasangan AccessKey Akun Alibaba Cloud memiliki izin atas semua operasi API. Gunakan pasangan AccessKey RAM user untuk memanggil operasi API atau melakukan O&M rutin.

    • Jangan hard-code ID AccessKey dan Rahasia AccessKey Anda dalam kode proyek. Jika bocor, semua sumber daya dalam akun Anda akan dikompromikan.

  • Opsional. Role dibuat untuk RAM user dan role tersebut diberikan izin yang diperlukan untuk mengakses ApsaraVideo VOD jika Anda ingin mengakses ApsaraVideo VOD menggunakan Security Token Service (STS). Untuk informasi lebih lanjut, lihat Dapatkan token STS.

Integrasikan Python upload SDK

Catatan
  • Untuk deskripsi terperinci struktur direktori upload SDK, lihat Struktur direktori.

  • Topik ini menggunakan pengguna biasa sebagai contoh untuk menjelaskan operasinya.

  1. Jalankan perintah berikut untuk menginstal paket dependensi.

    sudo pip install aliyun-python-sdk-core

    sudo pip install aliyun-python-sdk-vod

    sudo pip install oss2

    Catatan

    Jika Anda menggunakan Python 3, ubah sudo pip install aliyun-python-sdk-core menjadi sudo pip install aliyun-python-sdk-core-v3. Jika Anda memiliki beberapa versi Python yang terinstal, Anda dapat menggunakan perintah `pip3`. Jika mengalami masalah integrasi, lihat FAQ untuk memecahkan masalah tersebut.

  2. Unduh Python upload SDK dan kode contoh.

  3. Ekstrak VodUploadSDK-Python_1.3.*.zip dan salin folder voduploadsdk dari direktori VodUploadSDK-Python_1.3.* ke direktori proyek lokal Anda (disarankan) atau direktori site-packages.

Perbarui Python upload SDK

Jika Anda menemukan bahwa API baru atau fitur baru dari API yang sudah ada tidak tersedia di SDK Anda saat ini, perbarui SDK ke versi terbaru.

  1. Jalankan perintah berikut untuk memperbarui paket dependensi.

    sudo pip install --upgrade aliyun-python-sdk-vod

    sudo pip install --upgrade oss2

  2. Unduh Python upload SDK terbaru dan timpa file SDK lokal. Untuk informasi lebih lanjut, lihat Unduhan SDK.

    Catatan

    Anda dapat membuka file ChangeLog.txt di direktori voduploadsdk untuk melihat nomor versi SDK saat ini dan tanggal rilisnya.

Struktur direktori Python upload SDK

Direktori voduploadsdk

  • AliyunVodUtils.py

    Direktori

    Deskripsi

    AliyunVodLog

    Kelas log upload SDK. Diimplementasikan berdasarkan logging.

    AliyunVodUtils

    Kelas utilitas upload SDK.

    AliyunVodException

    Kelas exception upload SDK. Menyediakan penanganan exception terpadu. Anda dapat menangkap exception ini secara eksternal.

  • UploadVideoRequest.py

    Direktori

    Deskripsi

    UploadVideoRequest

    Kelas permintaan untuk mengunggah video. Untuk informasi lebih lanjut tentang field-nya, lihat CreateUploadVideo.

  • UploadImageRequest.py

    Direktori

    Deskripsi

    UploadImageRequest

    Kelas permintaan untuk mengunggah gambar. Untuk informasi lebih lanjut tentang field-nya, lihat CreateUploadImage.

  • UploadAttachedMediaRequest.py

    Direktori

    Deskripsi

    UploadAttachedMediaRequest

    Kelas permintaan untuk mengunggah aset media pendukung. Untuk informasi lebih lanjut tentang field-nya, lihat CreateUploadAttachedMedia.

  • AliyunVodUploader.py

    Direktori

    Deskripsi

    uploadLocalVideo

    API untuk mengunggah video lokal.

    uploadWebVideo

    API untuk mengunggah video web.

    uploadLocalM3u8

    Mengunggah video M3U8 lokal.

    uploadWebM3u8

    Mengunggah video M3U8 web.

    uploadImage

    Mengunggah file gambar lokal atau web.

    uploadAttachedMedia

    Mengunggah file aset media pendukung lokal atau web.

    parseWebM3u8

    Mengurai informasi shard dari file M3U8 web.

    parseLocalM3u8

    Mengurai informasi shard dari file M3U8 lokal.

    setApiRegion

    Mengatur titik akhir untuk VOD. Nilai default-nya adalah cn-shanghai (Shanghai). Wilayah di luar Tiongkok, seperti ap-southeast-1 (Singapura), juga didukung. Untuk informasi lebih lanjut, lihat ID wilayah VOD.

    setMultipartUpload

    Mengatur ambang batas dan ukuran bagian untuk unggah multi-bagian.

    uploadProgressCallback

    Fungsi callback untuk progres unggah. Anda dapat menulis ulang fungsi ini.

    setEnableCrc

    Menentukan apakah akan mengaktifkan pemeriksaan redundansi siklik (CRC) selama unggah. Secara default diaktifkan.

  • ChangeLog.txt: Berisi riwayat rilis. Baris pertama menunjukkan nomor versi SDK saat ini dan tanggal rilisnya.

Direktori samples

  • uploadVideo.py: Kode contoh untuk mengunggah video.

  • uploadImage.py: Kode contoh untuk mengunggah gambar.

  • uploadAttachedMedia.py: Kode contoh untuk mengunggah file aset media pendukung.

Skenario 1: Unggah file audio dan video

Unggah file biasa

Anda dapat mengunggah jenis file audio dan video berikut:

  • File lokal: Menggunakan unggah multi-bagian. Ukuran maksimum satu file adalah 48,8 TB. Unggah yang dapat dilanjutkan tidak didukung. Untuk informasi lebih lanjut, lihat fungsi `testUploadLocalVideo` dalam kode contoh.

  • File web: Anda dapat menentukan URL file untuk unggah. Ukuran maksimum satu file adalah 48,8 TB. Metode ini memerlukan pengunduhan file web ke disk lokal sebelum diunggah. Pastikan disk lokal Anda memiliki ruang yang cukup. Untuk informasi lebih lanjut, lihat fungsi `testUploadWebVideo` dalam kode contoh.

Klik untuk melihat kode contoh

# -*- coding: UTF-8 -*-
from voduploadsdk.AliyunVodUtils import *
from voduploadsdk.AliyunVodUploader import AliyunVodUploader
from voduploadsdk.UploadVideoRequest import UploadVideoRequest 
# Uji unggah file audio atau video lokal
def testUploadLocalVideo(accessKeyId, accessKeySecret, filePath, storageLocation=None):
    try:
        # Anda dapat menentukan wilayah tempat skrip unggah dideploy. Jika wilayah ECS sama dengan wilayah penyimpanan ApsaraVideo VOD, unggah akan secara otomatis dilakukan melalui jaringan internal. Ini lebih cepat dan menghemat lalu lintas internet.
        # ecsRegionId ="cn-shanghai"
        # uploader = AliyunVodUploader(accessKeyId, accessKeySecret, ecsRegionId)
        # Jangan tentukan wilayah ECS tempat skrip unggah dideploy.
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadVideoRequest = UploadVideoRequest(filePath, 'exampleTitle')
        # Anda dapat mengatur thumbnail video. Jika berupa gambar lokal atau web, Anda dapat menggunakan UploadImageRequest untuk mengunggah gambar ke ApsaraVideo VOD dan mendapatkan ImageURL.
        # Contoh ImageURL: https://example.com/sample-****.jpg
        #uploadVideoRequest.setCoverURL('<your Image URL>')  
        # Tag
        #uploadVideoRequest.setTags('tag1,tag2')
        if storageLocation:
            uploadVideoRequest.setStorageLocation(storageLocation)
        videoId = uploader.uploadLocalVideo(uploadVideoRequest)
        print("file: %s, videoId: %s" % (uploadVideoRequest.filePath, videoId))
    except AliyunVodException as e:
        print(e)
# Uji unggah file audio atau video web
def testUploadWebVideo(accessKeyId, accessKeySecret, fileUrl, storageLocation=None):
    try:
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadVideoRequest = UploadVideoRequest(fileUrl, 'exampleTitle')
        uploadVideoRequest.setTags('tag1,tag2')
        if storageLocation:
            uploadVideoRequest.setStorageLocation(storageLocation)
        videoId = uploader.uploadWebVideo(uploadVideoRequest)
        print("file: %s, videoId: %s" % (uploadVideoRequest.filePath, videoId))
    except AliyunVodException as e:
        print(e)
####  Jalankan kode uji   ####   
# AccessKey Akun Alibaba Cloud memiliki izin atas semua API. Kami menyarankan agar Anda menggunakan AccessKey RAM user untuk panggilan API atau O&M rutin.
# Jangan simpan ID AccessKey dan Rahasia AccessKey Anda dalam kode proyek. Hal ini dapat menyebabkan kebocoran AccessKey dan mengompromikan keamanan semua sumber daya di bawah akun Anda.
# Contoh ini membaca AccessKey dari variabel lingkungan untuk verifikasi identitas. Sebelum menjalankan kode contoh, konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET.
accessKeyId = os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
accessKeySecret = os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
localFilePath = '/opt/video/sample-****.mp4'
testUploadLocalVideo(accessKeyId, accessKeySecret, localFilePath)
# Contoh fileURL: http://video.developer.aliyundoc.com/video/sample-****.mp4
fileUrl = '<your file URL>'
#testUploadWebVideo(accessKeyId, accessKeySecret, fileUrl)

Unggah file M3U8

Klik untuk melihat kode contoh

# -*- coding: UTF-8 -*-
from voduploadsdk.AliyunVodUtils import *
from voduploadsdk.AliyunVodUploader import AliyunVodUploader
from voduploadsdk.UploadVideoRequest import UploadVideoRequest
# Uji unggah video M3U8 lokal
def testUploadLocalM3u8(accessKeyId, accessKeySecret, m3u8LocalFile):
    try:
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadVideoRequest = UploadVideoRequest(m3u8LocalFile, 'exampleTitle')
        # uploadVideoRequest.setTemplateGroupId('<TemplateGroupId>')
        # File segmen dan file M3U8 berada dalam direktori yang sama. SDK secara otomatis mengurai dan mengunggahnya.
        videoId = uploader.uploadLocalM3u8(uploadVideoRequest)
        print("file: %s, videoId: %s" % (uploadVideoRequest.filePath, videoId))
    except AliyunVodException as e:
        print(e)
# Uji unggah video M3U8 web
def testUploadWebM3u8(accessKeyId, accessKeySecret, m3u8FileUrl):
    try:
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadVideoRequest = UploadVideoRequest(m3u8FileUrl, 'exampleTitle')
        # Uraikan URL file segmen. Ini berlaku ketika URL segmen memiliki signature yang sama dengan file M3U8 atau tidak memiliki signature. Dalam kasus lain, Anda perlu menguraikannya sendiri.
        sliceFileUrls = uploader.parseWebM3u8(m3u8FileUrl)
        videoId = uploader.uploadWebM3u8(uploadVideoRequest, sliceFileUrls)
        print("file: %s, videoId: %s" % (uploadVideoRequest.filePath, videoId))
    except AliyunVodException as e:
        print(e)
####  Jalankan kode uji   ####
# AccessKey Akun Alibaba Cloud memiliki izin atas semua API. Kami menyarankan agar Anda menggunakan AccessKey RAM user untuk panggilan API atau O&M rutin.
# Jangan simpan ID AccessKey dan Rahasia AccessKey Anda dalam kode proyek. Hal ini dapat menyebabkan kebocoran AccessKey dan mengompromikan keamanan semua sumber daya di bawah akun Anda.
# Contoh ini membaca AccessKey dari variabel lingkungan untuk verifikasi identitas. Sebelum menjalankan kode contoh, konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET.
accessKeyId = os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
accessKeySecret = os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
m3u8LocalFile = '/opt/video/m3u8/example_01.m3u8'
#testUploadLocalM3u8(accessKeyId, accessKeySecret, m3u8LocalFile)
m3u8FileUrl = 'http://sample.oss.aliyuncs.com/video/m3u8/example****.m3u8'
#testUploadWebM3u8(accessKeyId, accessKeySecret, m3u8FileUrl)
            

Akselerasi unggah

Untuk mengunggah file besar (tingkat GB atau TB) atau melakukan unggah lintas wilayah, seperti mengunggah video dari Tiongkok daratan ke alamat penyimpanan di wilayah penyimpanan Singapura, Anda dapat mengaktifkan fitur akselerasi unggah. Untuk informasi lebih lanjut, lihat Aktifkan akselerasi unggah. Setelah mengaktifkan fitur ini, Anda harus menambahkan pasangan kunci-nilai AccelerateConfig key-value ke objek UserData dalam konfigurasi unggah. Jika objek `UserData` tidak ada, Anda harus membuatnya. Berikut contohnya:

uploadVideoRequest.setUserData("{\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");

Deskripsi parameter

Nama

Tipe

Deskripsi

Type

string

Jenis akselerasi unggah yang akan diaktifkan. Hanya `oss` yang didukung.

Domain

string

Nama domain yang dipercepat dari bucket Anda. Protokol default-nya adalah HTTPS.

Catatan

Gunakan nama domain yang dipercepat yang ditetapkan setelah aktivasi, misalnya, `vod-*******.oss-accelerate.aliyuncs.com`.

Skenario 2: Unggah gambar

Klik untuk melihat kode contoh

# -*- coding: UTF-8 -*-
from voduploadsdk.AliyunVodUtils import *
from voduploadsdk.AliyunVodUploader import AliyunVodUploader
from voduploadsdk.UploadImageRequest import UploadImageRequest
# Uji unggah gambar lokal
def testUploadLocalImage(accessKeyId, accessKeySecret, filePath):
    try:
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadImageRequest = UploadImageRequest(filePath)
        uploadImageRequest.setTitle('exampleTitle')  # Atur judul gambar. Nilai default-nya kosong.
        imageId, imageUrl = uploader.uploadImage(uploadImageRequest, True)
        print("file: %s, imageId: %s, imageUrl: %s" % (uploadImageRequest.filePath, imageId, imageUrl))
    except AliyunVodException as e:
        print(e)
# Uji unggah gambar web
def testUploadWebImage(accessKeyId, accessKeySecret, fileUrl):
    try:
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadImageRequest = UploadImageRequest(fileUrl)
        uploadImageRequest.setTitle('exampleTitle')  # Atur judul gambar. Nilai default-nya kosong.
        imageId, imageUrl = uploader.uploadImage(uploadImageRequest, False)
        print("file: %s, imageId: %s, imageUrl: %s" % (uploadImageRequest.filePath, imageId, imageUrl))
    except AliyunVodException as e:
        print(e)
####  Jalankan kode uji   ####
# AccessKey Akun Alibaba Cloud memiliki izin atas semua API. Kami menyarankan agar Anda menggunakan AccessKey RAM user untuk panggilan API atau O&M rutin.
# Jangan simpan ID AccessKey dan Rahasia AccessKey Anda dalam kode proyek. Hal ini dapat menyebabkan kebocoran AccessKey dan mengompromikan keamanan semua sumber daya di bawah akun Anda.
# Contoh ini membaca AccessKey dari variabel lingkungan untuk verifikasi identitas. Sebelum menjalankan kode contoh, konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET.
accessKeyId = os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
accessKeySecret = os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
localFilePath = '/opt/image/image01.png'
#testUploadLocalImage(accessKeyId, accessKeySecret, localFilePath)
fileUrl = 'http://vod-download.cn-shanghai.aliyuncs.com/retina/pic/20180208/496AE240-54AE-4CC8-8578-3EEC8F38****.gif'
testUploadWebImage(accessKeyId, accessKeySecret, fileUrl)
            

Skenario 3: Unggah aset media pendukung

Klik untuk melihat kode contoh

# -*- coding: UTF-8 -*-
from voduploadsdk.AliyunVodUtils import *
from voduploadsdk.AliyunVodUploader import AliyunVodUploader
from voduploadsdk.UploadAttachedMediaRequest import UploadAttachedMediaRequest
# Uji unggah aset media pendukung lokal (seperti file watermark atau caption)
def testUploadLocalAttachedMedia(accessKeyId, accessKeySecret, filePath):
    try:
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadAttachedRequest = UploadAttachedMediaRequest(filePath, 'watermark')
        uploadAttachedRequest.setTitle('exampleTitle')
        media = uploader.uploadAttachedMedia(uploadAttachedRequest, True)
        print(media)
    except AliyunVodException as e:
        print(e)
# Uji unggah aset media pendukung web (seperti file watermark atau caption)
def testUploadWebAttachedMedia(accessKeyId, accessKeySecret, fileUrl):
    try:
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadAttachedRequest = UploadAttachedMediaRequest(fileUrl, 'watermark')
        uploadAttachedRequest.setTitle('exampletitle')
        media = uploader.uploadAttachedMedia(uploadAttachedRequest, False)
        print(media)
    except AliyunVodException as e:
        print(e)
####  Jalankan kode uji   ####
# AccessKey Akun Alibaba Cloud memiliki izin atas semua API. Kami menyarankan agar Anda menggunakan AccessKey RAM user untuk panggilan API atau O&M rutin.
# Jangan simpan ID AccessKey dan Rahasia AccessKey Anda dalam kode proyek. Hal ini dapat menyebabkan kebocoran AccessKey dan mengompromikan keamanan semua sumber daya di bawah akun Anda.
# Contoh ini membaca AccessKey dari variabel lingkungan untuk verifikasi identitas. Sebelum menjalankan kode contoh, konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET.
accessKeyId = os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
accessKeySecret = os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
localFilePath = '/opt/image/sample.png'
#testUploadLocalAttachedMedia(accessKeyId, accessKeySecret, localFilePath)
fileUrl = 'http://vod-download.cn-shanghai.aliyuncs.com/retina/pic/20180208/496AE240-54AE-4CC8-8578-3EEC8F38****.gif'
testUploadWebAttachedMedia(accessKeyId, accessKeySecret, fileUrl)
            

FAQ

Saat Anda menggunakan kode contoh untuk mengunggah aliran video web, jika muncul error ERROR:root:Download fail: [Errno 2] No such file or directory, Anda dapat menyelesaikan masalah ini dengan membuat folder dlfiles secara manual di direktori yang sama dengan folder voduploadsdk.

/Users/fulin/Documents/Code/PythonProject/VodPythonUploadSdkTest/venv/bin/python  /Users/fulin/Documents/Code/PythonProject/VodPythonUploadSdkTest/uploadVideo.py
[2022-02-16 20:54:59]Download https://img.a...                              To /Users/fulin/Documents/Code/PythonProject/
/Users/fulin...                                                              : InsecureRequestWarning: Unverifi...
    warnings.warn(...)
[2022-02-16 20:54:59]Download fail: [Errno 2] No such file or directory: '/Users/fulin/Documents/Code/PythonProject/VodPythonUploadSdkTest/dlfiles/115...
Type: FileDownloadError, Code: Download File Error, Message: , HTTPStatus: NULL, RequestId: NULL
ERROR:root:Download fail: [Errno 2] No such file or directory: '/Users/fulin/Documents/Code/PythonProject/VodPythonUploadSdkTest/dlfiles/115310cd4d...
Process finished with exit code 0