Topik ini menjelaskan cara menggunakan Upload SDK untuk JavaScript guna mengunggah file media lokal 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
Anda dapat menggunakan Upload SDK untuk JavaScript hanya untuk mengunggah file audio, video, dan citra. SDK ini tidak mendukung pengunggahan aset media pendukung.
Unduh SDK dan demo
Versi: 1.5.7
Terakhir diperbarui: 2024-01-30
URL Unduh: V1.5.7 JavaScript upload SDK, Kode sumber Demo (jQuery dan Vue)
Metode integrasi
Upload SDK bergantung pada OSS SDK. Anda harus menentukan nilai yang valid untuk window.OSS. Jika tidak, kesalahan ReferenceError: OSS is not defined mungkin terjadi.
(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
Anda dapat secara manual menetapkan konten modul OSS sebagai nilai dari window.OSS. Contoh kode:
Jika Anda telah mereferensikan file dalam kode HTML menggunakan <script>, Anda tidak perlu mereferensikannya lagi.
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 unggah
Saat menginisialisasi instans SDK, Anda harus menentukan parameter userId untuk mengidentifikasi pengunggah. Nilainya dapat berupa ID akun Alibaba Cloud atau ID pengguna kustom. Anda dapat melihat ID tersebut di Alibaba Cloud Account Center. Jika Anda tidak menentukan parameter userId atau mengaturnya ke null, sebuah kesalahan akan dilaporkan.
Anda harus menentukan parameter
regionberdasarkan ID wilayah yang didukung oleh 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.
//eu-central-1, ap-southeast-1
region: "",
// Ukuran setiap bagian dalam unggah multi-bagian. Satuan: byte. Ukurannya tidak boleh lebih kecil 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 kali sistem mencoba mengulang unggah saat terjadi kesalahan jaringan. Nilai default: 3.
retryCount: 3,
// Interval waktu sistem mencoba mengulang unggah saat terjadi kesalahan jaringan. Nilai default: 2. Satuan: detik.
retryDuration: 2,
// Unggah dimulai.
onUploadstarted: function (uploadInfo) {},
// Unggah berhasil.
onUploadSucceed: function (uploadInfo) {},
// Unggah gagal.
onUploadFailed: function (uploadInfo, code, message) {},
// Progres unggah. Satuan: byte.
onUploadProgress: function (uploadInfo, totalSize, loadedPercent) {},
// Kredensial unggah atau token STS kedaluwarsa.
onUploadTokenExpired: function (uploadInfo) {},
// Semua file telah diunggah.
onUploadEnd: function (uploadInfo) {},
});
Konfigurasi kredensial
Sebelum melanjutkan, pahami proses unggah keseluruhan dari klien dan siapkan layanan otorisasi berdasarkan metode otorisasi yang sesuai:
Jika Anda menggunakan Metode 1: URL unggah dan kredensial, dapatkan URL unggah dan kredensial dari layanan otorisasi.
Jika Anda menggunakan Metode 2: Token STS, dapatkan token STS dari layanan otorisasi.
Anda harus mengonfigurasi informasi otorisasi yang dikembalikan dalam callback onUploadstarted. Saat kredensial kedaluwarsa, callback onUploadTokenExpired akan dipicu. Dalam kasus ini, Anda harus mendapatkan kredensial baru dengan memanggil operasi pembaruan kredensial.
Metode 1: URL unggah dan kredensial
Untuk mengonfigurasi URL unggah dan kredensial, panggil metode setUploadAuthAndAddress. Jika kredensial kedaluwarsa, sistem memicu callback onUploadTokenExpired. Dalam kasus ini, Anda harus memanggil metode resumeUploadWithAuth untuk mengonfigurasi kredensial unggah baru dan melanjutkan unggah.
// Unggah 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 unggah kedaluwarsa.
onUploadTokenExpired: function (uploadInfo) {
// Jika unggah file besar melebihi batas waktu saat menggunakan Metode 1 (UploadAuth),
// panggil operasi RefreshUploadVideo berdasarkan uploadInfo.videoId dan peroleh kembali nilai UploadAuth.
// Kemudian, 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('unggah kedaluwarsa dan lanjutkan unggah dengan uploadauth ' + uploadAuth)
})
self.statusText = 'Unggah melebihi batas waktu...'
},Deskripsi metode
uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress, videoId)
uploader.resumeUploadWithAuth(uploadAuth)Parameter | Deskripsi |
uploadInfo | Nilainya dapat diperoleh dari parameter pertama dalam callback onUploadstarted. |
uploadAuth | Kredensial unggah yang dikembalikan oleh operasi CreateUploadVideo. |
uploadAddress | URL unggah yang dikembalikan oleh operasi CreateUploadVideo. |
videoId | ID audio atau video yang dikembalikan oleh operasi CreateUploadVideo. |
Metode 2: Token STS
Untuk mengonfigurasi token STS, panggil metode setSTSToken. Jika token menjadi tidak valid, sistem memicu callback onUploadTokenExpired. Dalam kasus ini, Anda harus memanggil metode resumeUploadWithSTSToken untuk mengonfigurasi Token STS baru dan melanjutkan unggah.
/*Metode callback - Unggah dimulai.*/
onUploadstarted: function (uploadInfo) {
let stsUrl = "***.***.stsUrl" /*Gunakan metode setSTSToken untuk mendapatkan 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 | Nilainya dapat diperoleh dari parameter pertama dalam callback onUploadstarted. |
accessKeyId | Field |
accessKeySecret | Field |
secretToken | Field |
Tambahkan file
Gunakan kode berikut untuk mendengarkan event change pada elemen formulir <input type="file" /> dan tambahkan file ke daftar unggah 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 media yang akan diunggah. |
endpoint | Tidak | String | Titik akhir OSS. Jika Anda menentukan null, nilai sebenarnya ditentukan oleh AppServer. |
bucket | Tidak | String | Bucket tempat Anda ingin mengunggah file. Jika Anda menentukan null, nilai sebenarnya ditentukan oleh AppServer. |
object | Tidak | String | Objek tempat Anda ingin mengunggah file. Jika Anda menentukan null, nilai sebenarnya ditentukan oleh AppServer. |
paramData | Tidak | String | Informasi tentang file video atau audio yang ingin Anda unggah, seperti judul, deskripsi, pengaturan transkoding, dan pengaturan callback. Anda dapat menentukan Nilai parameter |
Mulai unggah
uploader.startUpload();Setelah unggah file dimulai, callback
onUploadProgressdipanggil untuk menyinkronkan progres unggah.Jika unggah file berhasil, callback
onUploadSucceeddipanggil untuk mengembalikan hasil unggah.
Tampilkan progres unggah
// Progres unggah file. Satuan: byte. Anda dapat menggunakan fungsi ini untuk mendapatkan progres unggah 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 = 'Unggah sedang berlangsung...'
},Dapatkan hasil unggah
// Unggah berhasil.
onUploadSucceed: function (uploadInfo) {
console.log("onUploadSucceed: " + uploadInfo.file.name + ", endpoint:" + uploadInfo.endpoint + ", bucket:" + uploadInfo.bucket + ", object:" + uploadInfo.object)
self.statusText = 'Unggah berhasil!'
},
// Unggah gagal.
onUploadFailed: function (uploadInfo, code, message) {
console.log("onUploadFailed: file:" + uploadInfo.file.name + ",code:" + code + ", message:" + message)
self.statusText = 'Unggah gagal!'
},Setelah video diunggah, Anda dapat menggunakan parameter videoId untuk mendapatkan URL pemutaran guna memutar video tersebut. Untuk informasi selengkapnya, lihat Dapatkan kredensial pemutaran.
imageUrltidak dikembalikan secara otomatis saat citra diunggah. Untuk mendapatkan URL citra, Anda dapat mengonfigurasi callback.
Fitur lanjutan
Gunakan akselerasi unggah
Untuk mengunggah file besar berukuran gigabyte atau terabyte, atau mengunggah video lintas wilayah—misalnya dari wilayah di Daratan Tiongkok ke alamat penyimpanan di wilayah penyimpanan Singapura—Anda dapat mengaktifkan fitur akselerasi unggah.
Untuk mengaktifkan fitur akselerasi unggah, kirim tiket. Anda perlu memberikan Alibaba Cloud Account UID dan Storage Address yang ingin Anda aktifkan akselerasi unggahnya.
Metode 1: URL unggah dan kredensial
Jika Anda menggunakan metode ini untuk mengunggah file, panggil operasi CreateUploadVideo - Dapatkan alamat unggah dan kredensial untuk audio atau video dan tentukan pasangan kunci-nilai dalam parameter UserData untuk mengonfigurasi pengaturan akselerasi. Contoh kode:
UserData={
"AccelerateConfig": {
"Type": "oss",
"Domain": "https://oss-accelerate.aliyuncs.com"
}
}Metode 2: Token STS
Jika Anda menggunakan metode ini untuk mengunggah file, panggil metode addFile, tambahkan properti UserData ke parameter paramData, lalu konfigurasikan konten unggah. Contoh kode:
uploader.addFile(file,null,null,null,'{"Vod":{"UserData":{"AccelerateConfig":{"Type":"oss","Domain":"https://oss-accelerate.aliyuncs.com"}}}}');Deskripsi UserData
Nama | Tipe | Wajib | Deskripsi |
userData | string | Tidak | Konfigurasi kustom, seperti konfigurasi callback dan konfigurasi akselerasi unggah. Nilainya harus berupa string JSON. Untuk informasi selengkapnya, lihat . |
Tabel berikut menjelaskan parameter-parameter tersebut.
Nama | Tipe | Deskripsi |
Type | string | Tipe tempat Anda ingin mengaktifkan akselerasi unggah. Hanya OSS yang didukung. |
Domain | string | Nama domain yang dipercepat dari bucket. Secara default, HTTPS digunakan. Catatan Titik akhir yang dipercepat ditetapkan setelah Anda mengaktifkan akselerasi unggah, seperti vod-*******.oss-accelerate.aliyuncs.com. |
Untuk informasi selengkapnya tentang cara mengonfigurasi UserData, lihat Parameter permintaan.
Hentikan unggah
Anda hanya dapat memanggil stopUpload saat file sedang diunggah. Jika tidak, stopUpload tidak berlaku.
uploader.stopUpload();Manajemen antrian
Anda dapat memanggil metode berikut untuk mengelola file yang diunggah atau sedang diunggah:
Kueri daftar unggah
Data yang dikembalikan berisi informasi tentang file yang diunggah melalui addFile. Awalan "file:" menunjukkan bahwa setiap elemen dalam daftar adalah file. Anda dapat memperoleh indeks file yang ingin dikelola dengan melakukan traversal.
var list = uploader.listFiles(); for (var i=0; i<list.length; i++) { console.log("file:" + list[i].file.name); }Hapus file yang akan diunggah
uploader.deleteFile(index);//Indeks file yang ingin Anda hapus. Indeks dikembalikan oleh operasi listFiles.Batalkan unggah satu file
CatatanSetelah memanggil
cancelFile, pesanoss is cancel as errorditampilkan di konsol. Hal ini mencegah bagian yang telah diunggah menempati ruang penyimpanan dan menghemat biaya yang tidak perlu.Untuk melanjutkan unggah yang dibatalkan, Anda harus menggunakan
uploader.resumeFile(index);untuk memulihkan file sebelum melanjutkan unggah.
uploader.cancelFile(index);Lanjutkan unggah satu file
uploader.resumeFile(index);Bersihkan daftar unggah
uploader.cleanList();
Lakukan unggah yang dapat dilanjutkan
Jika terjadi kesalahan selama unggah file—seperti penutupan paksa halaman atau crash browser—dan Anda mengunggah ulang file tersebut, Upload SDK untuk JavaScript akan melanjutkan unggah dari titik putus serta memperoleh kredensial unggah dari callback onUploadstarted. Jika Anda menggunakan Metode 1: URL unggah dan kredensial untuk mengunggah file, Anda dapat memanggil operasi API ApsaraVideo VOD berdasarkan nilai parameter videoId untuk memperoleh informasi titik putus. Contoh kode:
// Unggah 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 secara 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 ada, panggil operasi RefreshUploadVideo.
// Jika uploadInfo.videoId tidak ada, 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 = 'Unggah file dimulai...'
console.log("onUploadStarted:" + uploadInfo.file.name + ", endpoint:" + uploadInfo.endpoint + ", bucket:" + uploadInfo.bucket + ", object:" + uploadInfo.object)
} else {
// Tampilkan informasi titik putus.
console.log(uploader.getCheckpoint(uploadInfo.file));
// Jika parameter videoId memiliki nilai, unggah video gagal. Sistem melanjutkan unggah dari titik putus. Anda harus memperbarui kredensial unggah 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)
})
}
}Anda dapat menggunakan metode berikut untuk memperoleh informasi titik putus:
uploader.getCheckpoint(file);Penanganan pengecualian
Jika terjadi pengecualian saat menggunakan Upload SDK untuk JavaScript, Anda dapat merujuk pada kode kesalahan untuk mengidentifikasi penyebabnya. Untuk informasi selengkapnya, lihat Kode kesalahan klien.