All Products
Search
Document Center

ApsaraVideo VOD:Upload SDK for JavaScript

Last Updated:Sep 16, 2026

Gunakan Upload SDK for JavaScript untuk mengunggah file media ke ApsaraVideo VOD.

Persyaratan browser

Browser

Didukung

Versi

IE

✔️

Internet Explorer 10 dan yang lebih baru

Microsoft Edge

✔️

Semua

Chrome

✔️

Versi browser utama

Firefox

✔️

Safari

✔️

Browser default Android

✔️

Browser default iOS

✔️

Browser default Windows Phone

✔️

Deskripsi fitur

Upload SDK for JavaScript hanya mendukung pengunggahan audio, video, dan gambar. Aset media tambahan tidak didukung.

Unduh SDK dan demo

Metode integrasi

Upload SDK for JavaScript bergantung pada OSS SDK. Tetapkan window.OSS ke nilai yang valid. Jika tidak, akan muncul error ReferenceError: OSS is not defined.

(Direkomendasikan) Impor menggunakan <script> dalam kode HTML

<!--  es6-promise diperlukan untuk Internet Explorer. Internet Explorer 10 dan yang lebih baru didukung. -->
  <script src="../lib/es6-promise.min.js"></script>
  <script src="../lib/aliyun-oss-sdk-6.17.1.min.js"></script>
  <script src="../aliyun-upload-sdk-1.5.7.min.js"></script>

Impor menggunakan modul

Tetapkan secara manual modul OSS ke window.OSS:

Catatan

Lewati langkah ini jika Anda sudah menyertakan file melalui tag <script>.

import OSS from '../lib/aliyun-upload-sdk/lib/aliyun-oss-sdk-6.17.1.min'
window.OSS = OSS;
import '../lib/aliyun-upload-sdk/aliyun-upload-sdk-1.5.7.min'

Pengaturan dasar

Inisialisasi instans upload

  • Tentukan parameter userId untuk mengidentifikasi pengunggah. Gunakan ID akun Alibaba Cloud atau ID pengguna kustom dari Alibaba Cloud Account Center. Jika userId bernilai null atau tidak ditentukan, akan terjadi error.

  • Tetapkan parameter region ke ID wilayah ApsaraVideo VOD yang didukung. Untuk informasi selengkapnya, lihat ID wilayah ApsaraVideo VOD.

var uploader = new AliyunUpload.Vod({
  // Wajib. Identitas pengunggah. Nilainya dapat berupa ID akun Alibaba Cloud atau ID pengguna kustom. Anda dapat melihat ID tersebut di Alibaba Cloud Account Center (https://account-console.alibabacloud.com/).
  userId: "122",
  // Wilayah tempat Anda ingin mengunggah file. Nilai default: cn-shanghai. 
  // Contoh: eu-central-1 dan ap-southeast-1.
  region: "",
  // Ukuran setiap bagian dalam unggah multi-bagian. Satuan: byte. Ukurannya tidak boleh kurang dari 100 KB (100 × 1024). Ukuran default: 1 MB (1 × 1024 × 1024).
  partSize: 1048576,
  // Jumlah maksimum bagian yang dapat diunggah secara paralel. Nilai default: 5.
  parallel: 5,
  // Jumlah maksimum percobaan ulang sistem saat terjadi error jaringan. Nilai default: 3.
  retryCount: 3,
  // Interval antar percobaan ulang saat terjadi error jaringan. Nilai default: 2. Satuan: detik.
  retryDuration: 2,
  // Upload dimulai.
  onUploadstarted: function (uploadInfo) {},
  // Upload berhasil.
  onUploadSucceed: function (uploadInfo) {},
  // Upload gagal.
  onUploadFailed: function (uploadInfo, code, message) {},
  // Progres upload. Satuan: byte.
  onUploadProgress: function (uploadInfo, totalSize, loadedPercent) {},
  // Kredensial upload atau token STS kedaluwarsa.
  onUploadTokenExpired: function (uploadInfo) {},
  // Semua file telah diunggah.
  onUploadEnd: function (uploadInfo) {},
});

Konfigurasi kredensial

Sebelum melanjutkan, pahami proses upload dari client dan deploy layanan otorisasi. Untuk informasi selengkapnya, lihat Upload dari client.

  1. Jika Anda menggunakan Metode 1: URL dan kredensial upload, peroleh URL dan kredensial upload dari layanan otorisasi.

  2. Jika Anda menggunakan Metode 2: Token STS, peroleh token STS dari layanan otorisasi. Untuk informasi selengkapnya, lihat Peroleh token STS.

Konfigurasikan informasi otorisasi yang dikembalikan dalam callback onUploadstarted. Saat kredensial kedaluwarsa, callback onUploadTokenExpired akan dipicu. Peroleh kembali kredensial dengan memanggil operasi refresh.

Metode 1: URL dan kredensial upload

Panggil setUploadAuthAndAddress untuk mengonfigurasi URL dan kredensial upload. Jika kredensial kedaluwarsa, callback onUploadTokenExpired akan dipicu. Panggil resumeUploadWithAuth dengan kredensial baru untuk melanjutkan upload.

// Upload dimulai.
onUploadstarted: function (uploadInfo) {
  let refreshUrl = 'https://demo-vod.cn-shanghai.aliyuncs.com/voddemo/RefreshUploadVideo?BusinessType=vodai&TerminalType=pc&DeviceModel=iPhone9,2&UUID=59ECA-4193-4695-94DD-7E1247288&AppVersion=1.0.0&Title=haha1&FileName=xxx.mp4&VideoId=' + uploadInfo.videoId
  axios.get(refreshUrl).then(({data}) => {
    let uploadAuth = data.UploadAuth
    let uploadAddress = data.UploadAddress
    let videoId = data.VideoId
    uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress,videoId)
  })
},
// Kredensial upload kedaluwarsa.
onUploadTokenExpired: function (uploadInfo) {
  // Jika upload file besar mengalami timeout saat menggunakan Metode 1 (UploadAuth),
  // panggil operasi RefreshUploadVideo berdasarkan uploadInfo.videoId dan peroleh kembali nilai UploadAuth.
  // Lalu, panggil metode resumeUploadWithAuth. Dalam contoh ini, nilai UploadAuth langsung diperoleh karena resumeUploadWithAuth adalah metode uji coba.
  let refreshUrl = 'https://demo-vod.cn-shanghai.aliyuncs.com/voddemo/RefreshUploadVideo?BusinessType=vodai&TerminalType=pc&DeviceModel=iPhone9,2&UUID=59ECA-4193-4695-94DD-7E1247288&AppVersion=1.0.0&Title=haha1&FileName=xxx.mp4&VideoId=' + uploadInfo.videoId
  axios.get(refreshUrl).then(({data}) => {
    let uploadAuth = data.UploadAuth
    uploader.resumeUploadWithAuth(uploadAuth)
    console.log('upload expired and resume upload with uploadauth ' + uploadAuth)
  })
  self.statusText = 'Upload mengalami timeout...'
},

Deskripsi metode

uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress, videoId)
uploader.resumeUploadWithAuth(uploadAuth)

Parameter

Deskripsi

uploadInfo

Parameter pertama dari callback onUploadstarted.

uploadAuth

Kredensial upload yang dikembalikan oleh operasi CreateUploadVideo.

uploadAddress

URL upload yang dikembalikan oleh operasi CreateUploadVideo.

videoId

ID audio atau video yang dikembalikan oleh operasi CreateUploadVideo.

Metode 2: Token STS

Panggil setSTSToken untuk mengonfigurasi token STS. Jika token kedaluwarsa, callback onUploadTokenExpired akan dipicu. Panggil resumeUploadWithSTSToken dengan token baru untuk melanjutkan upload.

 /*Metode callback - Upload dimulai.*/
 onUploadstarted: function (uploadInfo) {
    let stsUrl = "***.***.stsUrl" /*Gunakan metode setSTSToken untuk memperoleh token STS.*/
    axios.get(stsUrl).then(({data}) => {
          var info = data.SecurityTokenInfo
          uploader.setSTSToken(uploadInfo, info.AccessKeyId, info.AccessKeySecret, info.SecretToken);
     })
 },
/*Metode callback - Kredensial kedaluwarsa.*/
 onUploadTokenExpired: function (uploadInfo) { 
     let stsUrl = "***.***.stsUrl"  /*Gunakan metode resumeUploadWithSTSToken untuk memperbarui token STS.*/
     axios.get(stsUrl).then(({data}) => {
         var info = data.SecurityTokenInfo  
         uploader.resumeUploadWithSTSToken(info.AccessKeyId, info.AccessKeySecret, info.SecretToken);      
     })
 },

Deskripsi metode

uploader.setSTSToken(uploadInfo, accessKeyId, accessKeySecret, secretToken)
uploader.resumeUploadWithSTSToken(accessKeyId, accessKeySecret, secretToken)

Parameter

Deskripsi

uploadInfo

Parameter pertama dari callback onUploadstarted.

accessKeyId

Bidang AccessKeyId dalam token STS.

accessKeySecret

Bidang AccessKeySecret dalam token STS.

secretToken

Bidang SecretToken dalam token STS.

Tambahkan file

Dengarkan event change pada <input type="file" /> untuk menambahkan file ke daftar uploader.

JavaScript native

 <form action="">
   <input type="file" name="file" id="files" multiple/>
 </form>
 
 <script>
   userData = '';
   document.getElementById("files")
    .addEventListener('change', function (event) {
      for(var i=0; i<event.target.files.length; i++) {
        // Kode logika.
        uploader.addFile(event.target.files[i],null,null,null,null)
      }
    });
 </script>

Vue

 <template>
  <input type="file" id="fileUpload" @change="fileChange($event)">
 </template>

<script>
  export default {
    data () {
      return {
        file: null,
      }
    },
    methods: {
      fileChange (e) {
        this.file = e.target.files[0]
        if (!this.file) {
          alert("Pilih file yang ingin Anda unggah.")
          return
        }
        var Title = this.file.name
        var userData = '{"Vod":{}}'
        if (this.uploader) {
          this.uploader.stopUpload()
        }
        // Inisialisasi uploader.
        this.uploader = this.createUploader() 
        this.uploader.addFile(this.file, null, null, null, userData)
      },
    }
  }
</script>

Deskripsi metode

uploader.addFile(file,endpoint,bucket,object,paramData)

Parameter

Wajib

Tipe

Deskripsi

file

Ya

File

File yang akan diunggah.

endpoint

Tidak

String

Titik akhir OSS. Jika null, AppServer memilih titik akhir.

bucket

Tidak

String

Bucket tujuan. Jika null, AppServer memilih bucket.

object

Tidak

String

Objek tujuan. Jika null, AppServer memilih objek.

paramData

Tidak

String

Metadata file seperti judul, deskripsi, transkoding, dan pengaturan callback. Tentukan paramData saat menggunakan upload token STS.

Nilai parameter paramData adalah string JSON. Contoh: '{"Vod":{}}'. Anda harus menentukan Vod dalam permintaan. Anda dapat menempatkan parameter yang didukung oleh parameter paramData di bawah Vod. Anda dapat menempatkan parameter permintaan dari operasi CreateUploadVideo atau CreateUploadImage.

Mulai upload

uploader.startUpload();
  1. Setelah upload file dimulai, callback onUploadProgress dipanggil untuk menyinkronkan progres upload.

  2. Jika upload file berhasil, callback onUploadSucceed dipanggil untuk mengembalikan hasil upload.

Tampilkan progres upload

// Progres upload file. Satuan: byte. Anda dapat menggunakan fungsi ini untuk memperoleh progres upload dan menampilkannya di halaman.
onUploadProgress: function (uploadInfo, totalSize, progress) {
  console.log("onUploadProgress:file:" + uploadInfo.file.name + ", fileSize:" + totalSize + ", percent:" + Math.ceil(progress * 100) + "%")
  let progressPercent = Math.ceil(progress * 100)
  self.authProgress = progressPercent
  self.statusText = 'Upload sedang berlangsung...'
},

Peroleh hasil upload

// Upload berhasil.
onUploadSucceed: function (uploadInfo) {
  console.log("onUploadSucceed: " + uploadInfo.file.name + ", endpoint:" + uploadInfo.endpoint + ", bucket:" + uploadInfo.bucket + ", object:" + uploadInfo.object)
  self.statusText = 'Upload berhasil!'
},
// Upload gagal.
onUploadFailed: function (uploadInfo, code, message) {
  console.log("onUploadFailed: file:" + uploadInfo.file.name + ",code:" + code + ", message:" + message)
  self.statusText = 'Upload gagal!'
},
  • Setelah video diunggah, gunakan videoId untuk memperoleh URL pemutaran. Untuk informasi selengkapnya, lihat Peroleh kredensial pemutaran.

  • imageUrl tidak dikembalikan secara otomatis untuk upload gambar. Konfigurasikan callback untuk memperolehnya. Untuk informasi selengkapnya, lihat Konfigurasi callback.

Fitur lanjutan

Gunakan akselerasi upload

Aktifkan akselerasi upload untuk file besar (GB/TB) atau upload lintas wilayah, misalnya dari Tiongkok daratan ke wilayah Singapura.

Untuk mengaktifkan fitur akselerasi upload, Anda perlu memberikan UID akun Alibaba Cloud dan alamat penyimpanan yang akan menggunakan akselerasi upload.

Untuk mengaktifkan fungsi akselerasi upload, Anda perlu atau membuat tiket. Anda perlu memberikan UID akun Alibaba Cloud dan alamat penyimpanan yang memerlukan akselerasi upload.

Metode 1: URL dan kredensial upload

Panggil operasi CreateUploadVideo dan konfigurasikan akselerasi dalam parameter UserData:

UserData={
  "AccelerateConfig": {
    "Type": "oss",
    "Domain": "https://oss-accelerate.aliyuncs.com"
  }
}

Metode 2: Token STS

Panggil metode addFile dengan properti UserData dalam parameter parmData:

uploader.addFile(file,null,null,null,'{"Vod":{"UserData":{"AccelerateConfig":{"Type":"oss","Domain":"https://oss-accelerate.aliyuncs.com"}}}}');

Deskripsi UserData

Nama

Type

Wajib

Deskripsi

userData

string

Tidak

Konfigurasi kustom seperti callback dan akselerasi upload. Harus berupa string JSON.

Tabel berikut menjelaskan parameter-parameter tersebut.

Parameter

Tipe

Deskripsi

Type

string

Tipe akselerasi upload. Tetapkan ke oss.

Domain

string

Nama domain yang dipercepat. HTTPS secara default.

Catatan

Titik akhir akselerasi yang ditetapkan setelah Anda mengaktifkan akselerasi upload digunakan, seperti vod-*******.oss-accelerate.aliyuncs.com.

Untuk informasi selengkapnya tentang cara mengonfigurasi UserData, lihat Deskripsi parameter permintaan.

Hentikan upload

Catatan

stopUpload hanya berlaku saat file sedang diunggah.

uploader.stopUpload();

Kelola daftar file

Gunakan operasi berikut untuk mengelola file yang telah diunggah atau sedang dalam proses.

  • listFiles: Menanyakan daftar upload.

    Mengembalikan file yang ditambahkan melalui addFile. Properti file menunjukkan tipe file. Lakukan iterasi daftar untuk mendapatkan indeks file guna operasi manajemen.

    var list = uploader.listFiles();
    for (var i=0; i<list.length; i++) {
        console.log("file:" + list[i].file.name);
    }
  • deleteFile: Menghapus file yang akan diunggah.

    uploader.deleteFile(index);//Indeks file yang ingin Anda hapus. Indeks dikembalikan oleh operasi listFiles.
  • cancelFile: Membatalkan upload file.

    Catatan
    • Setelah Anda memanggil cancelFile, pesan oss is cancel as error muncul di konsol. Hal ini mencegah bagian yang telah diunggah memakan ruang penyimpanan dan menimbulkan biaya.

    • Untuk melanjutkan upload yang dibatalkan, panggil uploader.resumeFile(index); untuk memulihkan file terlebih dahulu.

    uploader.cancelFile(index);
  • resumeFile: Melanjutkan upload file.

    uploader.resumeFile(index);
  • cleanList: Membersihkan daftar upload.

    uploader.cleanList();

Upload yang dapat dilanjutkan

Jika upload gagal karena crash halaman atau error browser, SDK akan melanjutkan dari titik terakhir saat upload diulang dan memperoleh kredensial dari callback onUploadstarted. Dengan Metode 1: URL dan kredensial upload, panggil operasi API ApsaraVideo VOD menggunakan videoId untuk memperoleh informasi titik terakhir:

// Upload dimulai.
onUploadstarted: function (uploadInfo) {
  // Jika Anda menggunakan UploadAuth untuk mengunggah file, panggil metode uploader.setUploadAuthAndAddress.
  // Jika Anda menggunakan UploadAuth untuk mengunggah file, panggil operasi API ApsaraVideo VOD yang berbeda untuk memperoleh uploadAuth dan uploadAddress berdasarkan apakah uploadInfo.videoId memiliki nilai.
  // Jika uploadInfo.videoId memiliki nilai, panggil operasi RefreshUploadVideo. Jika tidak, panggil operasi CreateUploadVideo.
  // Perhatikan informasi berikut: Operasi dipanggil langsung untuk memperoleh UploadAuth karena ini adalah demo uji coba. Dalam skenario aktual, Anda harus memanggil operasi tertentu untuk memperoleh UploadAuth berdasarkan apakah uploadInfo.videoId memiliki nilai.
  // Jika uploadInfo.videoId memiliki nilai, panggil operasi RefreshUploadVideo.
  // Jika uploadInfo.videoId kosong, panggil operasi CreateUploadVideo.
  if (!uploadInfo.videoId) {
    let createUrl = 'https://demo-vod.cn-shanghai.aliyuncs.com/voddemo/CreateUploadVideo?Title=testvod1&FileName=aa.mp4&BusinessType=vodai&TerminalType=pc&DeviceModel=iPhone9,2&UUID=59ECA-4193-4695-94DD-7E1247288&AppVersion=1.0.0&VideoId=5bfcc7864fc14b96972842172207c9e6'
    axios.get(createUrl).then(({data}) => {
      let uploadAuth = data.UploadAuth
      let uploadAddress = data.UploadAddress
      let videoId = data.VideoId
      uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress,videoId)                
    })
    self.statusText = 'Upload file dimulai...'
    console.log("onUploadStarted:" + uploadInfo.file.name + ", endpoint:" + uploadInfo.endpoint + ", bucket:" + uploadInfo.bucket + ", object:" + uploadInfo.object)
  } else {
    // Tampilkan informasi titik terakhir.
    console.log(uploader.getCheckpoint(uploadInfo.file));
    // Jika parameter videoId memiliki nilai, upload video gagal. Sistem melanjutkan upload dari titik terakhir. Anda harus memperbarui kredensial upload berdasarkan nilai videoId.
    let refreshUrl = 'https://demo-vod.cn-shanghai.aliyuncs.com/voddemo/RefreshUploadVideo?BusinessType=vodai&TerminalType=pc&DeviceModel=iPhone9,2&UUID=59ECA-4193-4695-94DD-7E1247288&AppVersion=1.0.0&Title=haha1&FileName=xxx.mp4&VideoId=' + uploadInfo.videoId
    axios.get(refreshUrl).then(({data}) => {
      let uploadAuth = data.UploadAuth
      let uploadAddress = data.UploadAddress
      let videoId = data.VideoId
      uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress,videoId)
    })
  }
}

Dapatkan informasi breakpoint:

 uploader.getCheckpoint(file);

Penanganan pengecualian

Jika terjadi pengecualian, periksa bagian client upload SDK dalam topik Kode error untuk menemukan penyebabnya.