Utilisez le SDK de téléchargement JavaScript pour envoyer des fichiers multimédias vers ApsaraVideo VOD.
Prérequis du navigateur
Navigateur | Pris en charge | Version |
IE | ✔️ | Internet Explorer 10 et versions ultérieures |
Microsoft Edge | ✔️ | Toutes |
Chrome | ✔️ | Versions courantes des navigateurs |
Firefox | ✔️ | |
Safari | ✔️ | |
Navigateur par défaut Android | ✔️ | |
Navigateur par défaut iOS | ✔️ | |
Navigateur par défaut Windows Phone | ✔️ |
Description des fonctionnalités
Le SDK de téléchargement JavaScript prend uniquement en charge l'envoi de fichiers audio, vidéo et image. Les ressources multimédias auxiliaires ne sont pas prises en charge.
Téléchargement du SDK et de la démo
Version du SDK : 1.5.7.
Date de mise à jour : 30 janvier 2024.
Adresses de téléchargement : SDK de téléchargement pour JavaScript V1.5.7 et Code source de la démo jQuery et Vue.
Méthodes d'intégration
Le SDK de téléchargement JavaScript dépend du SDK OSS. Définissez une valeur valide pour window.OSS. Dans le cas contraire, l'erreur ReferenceError: OSS is not defined se produit.
(Recommandé) Importation à l'aide de <script> dans le code HTML
<!-- es6-promise is required for Internet Explorer. Internet Explorer 10 and later are supported. -->
<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>
Importation à l'aide d'un module
Attribuez manuellement le module OSS à window.OSS :
Ignorez cette étape si vous avez déjà inclus les fichiers via des balises <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'
Paramètres de base
Initialisation de l'instance de téléchargement
Spécifiez le paramètre userId pour identifier l'utilisateur qui effectue le téléchargement. Utilisez un ID de compte Alibaba Cloud ou un ID utilisateur personnalisé disponible dans le Alibaba Cloud Account Center. Si le paramètre userId est nul ou non spécifié, une erreur se produit.
Définissez le paramètre
regionsur un ID de région ApsaraVideo VOD pris en charge. Pour plus d'informations, consultez la rubrique ID de région ApsaraVideo VOD.
var uploader = new AliyunUpload.Vod({
// Required. The identity of the uploader. The value can be an Alibaba Cloud account ID or a custom user ID. You can view the ID in Alibaba Cloud Account Center (https://account-console.alibabacloud.com/).
userId: "122",
// The regions where you want to upload the files. Default value: cn-shanghai.
// Examples: eu-central-1 and ap-southeast-1.
region: "",
// The size of each part in a multipart upload. Unit: bytes. The size cannot be smaller than 100 KB (100 × 1024). Default size: 1 MB (1 × 1024 × 1024).
partSize: 1048576,
// The maximum number of parts that can be uploaded in parallel. Default value: 5.
parallel: 5,
// The maximum number of times the system retries the upload when a network error occurs. Default value: 3.
retryCount: 3,
// The interval at which the system retries the upload when a network error occurs. Default value: 2. Unit: seconds.
retryDuration: 2,
// The upload is started.
onUploadstarted: function (uploadInfo) {},
// The upload is successful.
onUploadSucceed: function (uploadInfo) {},
// The upload fails.
onUploadFailed: function (uploadInfo, code, message) {},
// The upload progress. Unit: bytes.
onUploadProgress: function (uploadInfo, totalSize, loadedPercent) {},
// The upload credential or STS token expires.
onUploadTokenExpired: function (uploadInfo) {},
// All files are uploaded.
onUploadEnd: function (uploadInfo) {},
});
Configuration des informations d'identification
Avant de poursuivre, assurez-vous de comprendre le processus de téléchargement côté client et d'avoir déployé un service d'autorisation. Pour plus d'informations, consultez la rubrique Téléchargement depuis les clients.
Si vous utilisez la Méthode 1 : URL de téléchargement et informations d'identification, obtenez les URL de téléchargement et les informations d'identification auprès du service d'autorisation.
Si vous utilisez la Méthode 2 : jeton STS, obtenez un jeton STS auprès du service d'autorisation. Pour plus d'informations, consultez la rubrique Obtention d'un jeton STS.
Configurez les informations d'autorisation renvoyées dans le rappel onUploadstarted. Lorsque les informations d'identification expirent, le rappel onUploadTokenExpired est déclenché. Obtenez à nouveau des informations d'identification en appelant l'opération de rafraîchissement.
Méthode 1 : URL de téléchargement et informations d'identification
Appelez setUploadAuthAndAddress pour configurer l'URL de téléchargement et les informations d'identification. Si les informations d'identification expirent, le rappel onUploadTokenExpired est déclenché. Appelez resumeUploadWithAuth avec de nouvelles informations d'identification pour reprendre le téléchargement.
// The upload is started.
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)
})
},
// The upload credential expires.
onUploadTokenExpired: function (uploadInfo) {
// If the upload of a large file times out when you use Method 1 (UploadAuth),
// call the RefreshUploadVideo operation based on uploadInfo.videoId and re-obtain the value of UploadAuth.
// Then, call the resumeUploadWithAuth method. In this example, the value of UploadAuth is directly obtained because resumeUploadWithAuth is a test method.
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 = 'The upload times out...'
},
Description de la méthode
uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress, videoId)
uploader.resumeUploadWithAuth(uploadAuth)
|
Paramètre |
Description |
|
uploadInfo |
Premier paramètre du rappel onUploadstarted. |
|
uploadAuth |
Informations d'identification de téléchargement renvoyées par l'opération CreateUploadVideo. |
|
uploadAddress |
URL de téléchargement renvoyée par l'opération CreateUploadVideo. |
|
videoId |
ID audio ou vidéo renvoyé par l'opération CreateUploadVideo. |
Méthode 2 : jeton STS
Appelez setSTSToken pour configurer le jeton STS. Si le jeton expire, le rappel onUploadTokenExpired est déclenché. Appelez resumeUploadWithSTSToken avec un nouveau jeton pour reprendre le téléchargement.
/*Callback method - The upload is started.*/
onUploadstarted: function (uploadInfo) {
let stsUrl = "***.***.stsUrl" /*Use the setSTSToken method to obtain the STS token.*/
axios.get(stsUrl).then(({data}) => {
var info = data.SecurityTokenInfo
uploader.setSTSToken(uploadInfo, info.AccessKeyId, info.AccessKeySecret, info.SecretToken);
})
},
/*Callback method - The credential times out.*/
onUploadTokenExpired: function (uploadInfo) {
let stsUrl = "***.***.stsUrl" /*Use the resumeUploadWithSTSToken method to refresh the STS token.*/
axios.get(stsUrl).then(({data}) => {
var info = data.SecurityTokenInfo
uploader.resumeUploadWithSTSToken(info.AccessKeyId, info.AccessKeySecret, info.SecretToken);
})
},
Description de la méthode
uploader.setSTSToken(uploadInfo, accessKeyId, accessKeySecret, secretToken)
uploader.resumeUploadWithSTSToken(accessKeyId, accessKeySecret, secretToken)
|
Paramètre |
Description |
|
uploadInfo |
Premier paramètre du rappel onUploadstarted. |
|
accessKeyId |
Champ |
|
accessKeySecret |
Champ |
|
secretToken |
Champ |
Ajout de fichiers
Écoutez l'événement change sur <input type="file" /> pour ajouter des fichiers à la liste uploader.
JavaScript natif
<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++) {
// The logic code.
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("Select the files that you want to upload.")
return
}
var Title = this.file.name
var userData = '{"Vod":{}}'
if (this.uploader) {
this.uploader.stopUpload()
}
// Initialize an uploader.
this.uploader = this.createUploader()
this.uploader.addFile(this.file, null, null, null, userData)
},
}
}
</script>
Description de la méthode
uploader.addFile(file,endpoint,bucket,object,paramData)
|
Paramètre |
Obligatoire |
Type |
Description |
|
file |
Oui |
Fichier |
Fichier à télécharger. |
|
endpoint |
Non |
Chaîne |
Endpoint OSS. Si la valeur est nulle, AppServer sélectionne l'endpoint. |
|
bucket |
Non |
Chaîne |
Bucket cible. Si la valeur est nulle, AppServer sélectionne le bucket. |
|
object |
Non |
Chaîne |
Objet cible. Si la valeur est nulle, AppServer sélectionne l'objet. |
|
paramData |
Non |
Chaîne |
Métadonnées du fichier, telles que le titre, la description, le transcodage et les paramètres de rappel. Spécifiez La valeur du paramètre |
Démarrage du téléchargement
uploader.startUpload();
Une fois le téléchargement du fichier démarré, le rappel
onUploadProgressest invoqué pour synchroniser la progression du téléchargement.Si le téléchargement du fichier réussit, le rappel
onUploadSucceedest invoqué pour renvoyer le résultat du téléchargement.
Affichage de la progression du téléchargement
// The file upload progress. Unit: bytes. You can use this function to obtain the upload progress and display the upload progress on the page.
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 = 'The upload is ongoing...'
},
Obtention du résultat du téléchargement
// The upload is successful.
onUploadSucceed: function (uploadInfo) {
console.log("onUploadSucceed: " + uploadInfo.file.name + ", endpoint:" + uploadInfo.endpoint + ", bucket:" + uploadInfo.bucket + ", object:" + uploadInfo.object)
self.statusText = 'The upload is successful!'
},
// The upload fails.
onUploadFailed: function (uploadInfo, code, message) {
console.log("onUploadFailed: file:" + uploadInfo.file.name + ",code:" + code + ", message:" + message)
self.statusText = 'The upload fails!'
},
Une fois la vidéo téléchargée, utilisez videoId pour obtenir l'URL de lecture. Pour plus d'informations, consultez la rubrique Obtention d'informations d'identification de lecture.
imageUrln'est pas renvoyé automatiquement pour les téléchargements d'images. Configurez un rappel pour l'obtenir. Pour plus d'informations, consultez la rubrique Configuration des rappels.
Fonctionnalités avancées
Utilisation de l'accélération du téléchargement
Activez l'accélération du téléchargement pour les fichiers volumineux (Go/TB) ou les téléchargements interrégionaux, par exemple depuis la Chine continentale vers la région Singapour.
Pour activer la fonction d'accélération du téléchargement, vous devez soumettre un ticket. Vous devez fournir l'UID du compte Alibaba Cloud et l'adresse de stockage qui doit utiliser l'accélération du téléchargement.
Méthode 1 : URL de téléchargement et informations d'identification
Appelez l'opération CreateUploadVideo et configurez l'accélération dans le paramètre UserData :
UserData={
"AccelerateConfig": {
"Type": "oss",
"Domain": "https://oss-accelerate.aliyuncs.com"
}
}
Méthode 2 : jeton STS
Appelez la méthode addFile avec la propriété UserData dans le paramètre parmData :
uploader.addFile(file,null,null,null,'{"Vod":{"UserData":{"AccelerateConfig":{"Type":"oss","Domain":"https://oss-accelerate.aliyuncs.com"}}}}');
Description de UserData
|
Nom |
Type |
Obligatoire |
Description |
|
userData |
string |
Non |
Configurations personnalisées telles que les rappels et l'accélération du téléchargement. Doit être une chaîne JSON. |
Le tableau suivant décrit les paramètres.
Paramètre | Type | Description |
Type | string | Type d'accélération du téléchargement. Définissez sur oss. |
Domain | string | Nom de domaine accéléré. HTTPS par défaut. Remarque Un endpoint accéléré attribué après l'activation de l'accélération du téléchargement est utilisé, tel que vod-***.oss-accelerate.aliyuncs.com. |
Pour plus d'informations sur la configuration de UserData, consultez la rubrique Descriptions des paramètres de requête.
Arrêt d'un téléchargement
stopUpload prend effet uniquement pendant le téléchargement d'un fichier.
uploader.stopUpload();
Gestion d'une liste de fichiers
Utilisez les opérations suivantes pour gérer les fichiers téléchargés ou en cours de téléchargement.
-
listFiles : Interroge la liste de téléchargement.
Renvoie les fichiers ajoutés via addFile. La propriété file indique le type de fichier. Parcourez la liste pour obtenir les index de fichier pour les opérations de gestion.
var list = uploader.listFiles(); for (var i=0; i<list.length; i++) { console.log("file:" + list[i].file.name); } -
deleteFile : Supprime un fichier à télécharger.
uploader.deleteFile(index);//The index of the file that you want to delete. The index is returned by the listFiles operation. -
cancelFile : Annule le téléchargement d'un fichier.
RemarqueAprès avoir appelé
cancelFile, le messageoss is cancel as errorapparaît dans la console. Cela empêche les parties téléchargées d'occuper de l'espace de stockage et d'engendrer des coûts.Pour reprendre un téléchargement annulé, appelez d'abord
uploader.resumeFile(index);pour restaurer le fichier.
uploader.cancelFile(index); -
resumeFile : Reprend le téléchargement d'un fichier.
uploader.resumeFile(index); -
cleanList : Efface la liste de téléchargement.
uploader.cleanList();
Téléchargement avec reprise
Si un téléchargement échoue en raison d'un plantage de la page ou d'une erreur du navigateur, le SDK reprend le téléchargement au point d'arrêt lors de la nouvelle tentative et obtient les informations d'identification à partir du rappel onUploadstarted. Avec la Méthode 1 : URL de téléchargement et informations d'identification, appelez les API ApsaraVideo VOD en utilisant videoId pour obtenir les informations sur le point d'arrêt :
// The upload is started.
onUploadstarted: function (uploadInfo) {
// If you use UploadAuth to upload the file, call the uploader.setUploadAuthAndAddress method.
// If you use UploadAuth to upload the file, call different ApsaraVideo VOD API operations to obtain uploadAuth and uploadAddress based on whether uploadInfo.videoId has a value.
// If uploadInfo.videoId has a value, call the RefreshUploadVideo operation. Otherwise, call the CreateUploadVideo operation.
// Take note of the following information: An operation is directly called to obtain UploadAuth because this is a test demo. In actual scenarios, you must call a specific operation to obtain UploadAuth based on whether uploadInfo.videoId has a value.
// If uploadInfo.videoId has a value, call the RefreshUploadVideo operation.
// If uploadInfo.videoId is empty, call the CreateUploadVideo operation.
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 = 'The file upload is started...'
console.log("onUploadStarted:" + uploadInfo.file.name + ", endpoint:" + uploadInfo.endpoint + ", bucket:" + uploadInfo.bucket + ", object:" + uploadInfo.object)
} else {
// Display the breakpoint information.
console.log(uploader.getCheckpoint(uploadInfo.file));
// If the videoId parameter has a value, the video upload fails. The system resumes the upload from the breakpoint. You must refresh the upload credential based on the value of 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)
})
}
}
Obtention des informations sur le point d'arrêt :
uploader.getCheckpoint(file);
Gestion des exceptions
En cas d'exception, consultez la section relative au SDK de téléchargement côté client dans la rubrique Codes d'erreur pour identifier la cause.