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
Versi SDK: 1.5.7.
Waktu pembaruan: 30 Januari 2024.
Alamat unduhan: Upload SDK for JavaScript V1.5.7 dan Kode sumber demo jQuery dan Vue.
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:
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
regionke 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.
Jika Anda menggunakan Metode 1: URL dan kredensial upload, peroleh URL dan kredensial upload dari layanan otorisasi.
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 |
accessKeySecret | Bidang |
secretToken | Bidang |
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 Nilai parameter |
Mulai upload
uploader.startUpload();Setelah upload file dimulai, callback
onUploadProgressdipanggil untuk menyinkronkan progres upload.Jika upload file berhasil, callback
onUploadSucceeddipanggil 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.
imageUrltidak 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
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.
CatatanSetelah Anda memanggil
cancelFile, pesanoss is cancel as errormuncul 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.