Tous les produits
Search
Centre de documentation

ApsaraVideo VOD:Télécharger des fichiers à l'aide du SDK Python

Dernière mise à jour :Sep 22, 2026

Cette rubrique fournit des exemples détaillés d'utilisation du SDK de téléchargement côté serveur pour Python afin de transférer divers fichiers multimédias vers ApsaraVideo VOD.

Présentation

Le SDK de téléchargement Python suit le processus général du SDK côté serveur d'ApsaraVideo VOD. Pour plus d'informations, consultez la section Processus de téléchargement. Voici les étapes de base pour utiliser le SDK de téléchargement Python :

  1. Vérifiez les prérequis. Pour plus d'informations, consultez la section Prérequis.

  2. Intégrez le SDK de téléchargement Python. Pour plus d'informations, consultez la section Intégrer le SDK de téléchargement Python.

  3. Implémentez la logique de téléchargement en configurant les informations de transfert.

  4. L'endpoint par défaut du SDK de téléchargement Python est cn-shanghai (Shanghai). Pour transférer des fichiers multimédias vers d'autres régions, spécifiez la région à l'aide de ApiRegion dans AliyunVodUploader.py. Pour plus d'informations sur les endpoints pris en charge par ApsaraVideo VOD, consultez la section Endpoints.

    L'exemple suivant définit la région de téléchargement sur cn-beijing (Pékin) :

    self.setApiRegion('cn-beijing')

Prérequis

  • ApsaraVideo VOD est activé. Pour plus d'informations, consultez la section Activer ApsaraVideo VOD.

  • Configurez les paramètres système requis pour le téléchargement, notamment le chemin de stockage dans la région spécifiée et les paramètres de rappel. Pour plus d'informations, consultez les sections Gérer les buckets de stockage et Configurer les rappels.

  • Créez un utilisateur RAM pour accéder à ApsaraVideo VOD. Afin de prévenir les risques de sécurité liés à la divulgation de la paire AccessKey de votre compte Alibaba Cloud, nous vous recommandons de créer un utilisateur RAM et de lui accorder les autorisations nécessaires pour accéder à ApsaraVideo VOD. Utilisez ensuite la paire AccessKey de l'utilisateur RAM pour accéder à ApsaraVideo VOD. Pour plus d'informations, consultez la section Créer un utilisateur RAM et accorder des autorisations.

  • Configurez les variables d'environnement ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET. Pour plus d'informations, consultez la section Configurer les variables d'environnement sous Linux, macOS et Windows.

    Important
    • Une paire AccessKey de compte Alibaba Cloud dispose d'autorisations sur toutes les opérations API. Utilisez la paire AccessKey d'un utilisateur RAM pour appeler des opérations API ou effectuer des tâches d'exploitation et de maintenance courantes.

    • N'intégrez pas directement votre AccessKey ID et votre AccessKey Secret dans le code de votre projet. En cas de fuite, toutes les ressources de votre compte seraient compromises.

  • (Facultatif) Si vous souhaitez accéder à ApsaraVideo VOD via Security Token Service (STS), créez un rôle pour l'utilisateur RAM et accordez-lui les autorisations nécessaires. Pour plus d'informations, consultez la section Obtenir un jeton STS.

Intégrer le SDK de téléchargement Python

Remarque
  • Pour une description détaillée des répertoires du SDK de téléchargement, consultez la section Structure des répertoires.

  • Cette rubrique utilise un utilisateur standard comme exemple pour décrire les opérations.

  1. Exécutez les commandes suivantes pour installer les packages de dépendance.

    sudo pip install aliyun-python-sdk-core

    sudo pip install aliyun-python-sdk-vod

    sudo pip install oss2

    Remarque

    Si vous utilisez Python 3, remplacez sudo pip install aliyun-python-sdk-core par sudo pip install aliyun-python-sdk-core-v3. Si plusieurs versions de Python sont installées, vous pouvez utiliser la commande pip3. En cas de problèmes d'intégration, consultez la section FAQ pour les résoudre.

  2. Téléchargez le SDK de téléchargement Python et l'exemple de code.

  3. Décompressez VodUploadSDK-Python_1,3.*.zip et copiez le dossier voduploadsdk depuis le répertoire VodUploadSDK-Python_1,3.* vers votre répertoire de projet local (recommandé) ou le répertoire site-packages.

Mettre à jour le SDK de téléchargement Python

Si vous constatez que de nouvelles API ou de nouvelles fonctionnalités d'API existantes ne sont pas disponibles dans votre SDK actuel, mettez à jour le SDK vers la dernière version.

  1. Exécutez les commandes suivantes pour mettre à jour les packages de dépendance.

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

    sudo pip install --upgrade oss2

  2. Téléchargez la dernière version du SDK de téléchargement Python et écrasez les fichiers SDK locaux. Pour plus d'informations, consultez la section Téléchargement du SDK.

    Remarque

    Ouvrez le fichier ChangeLog.txt situé dans le répertoire voduploadsdk pour afficher le numéro de version actuel du SDK et la date de publication.

Structure des répertoires du SDK de téléchargement Python

Le répertoire voduploadsdk

  • AliyunVodUtils.py

    Répertoire

    Description

    AliyunVodLog

    La classe de journalisation du SDK de téléchargement. Elle est implémentée sur la base de logging.

    AliyunVodUtils

    La classe utilitaire du SDK de téléchargement.

    AliyunVodException

    La classe d'exception du SDK de téléchargement. Elle offre une gestion unifiée des exceptions. Vous pouvez intercepter cette exception en externe.

  • UploadVideoRequest.py

    Répertoire

    Description

    UploadVideoRequest

    La classe de requête pour le téléchargement de vidéos. Pour plus d'informations sur les champs, consultez la section CreateUploadVideo.

  • UploadImageRequest.py

    Répertoire

    Description

    UploadImageRequest

    La classe de requête pour le téléchargement d'images. Pour plus d'informations sur les champs, consultez la section CreateUploadImage.

  • UploadAttachedMediaRequest.py

    Répertoire

    Description

    UploadAttachedMediaRequest

    La classe de requête pour le téléchargement de ressources multimédias auxiliaires. Pour plus d'informations sur les champs, consultez la section CreateUploadAttachedMedia.

  • AliyunVodUploader.py

    Répertoire

    Description

    uploadLocalVideo

    L'API pour le téléchargement de vidéos locales.

    uploadWebVideo

    L'API pour le téléchargement de vidéos web.

    uploadLocalM3u8

    Télécharge des vidéos M3U8 locales.

    uploadWebM3u8

    Télécharge des vidéos M3U8 web.

    uploadImage

    Télécharge des fichiers image locaux ou web.

    uploadAttachedMedia

    Télécharge des fichiers de ressources multimédias auxiliaires locaux ou web.

    parseWebM3u8

    Analyse les informations de shard d'un fichier M3U8 web.

    parseLocalM3u8

    Analyse les informations de shard d'un fichier M3U8 local.

    setApiRegion

    Définit l'endpoint pour VOD. La valeur par défaut est cn-shanghai (Shanghai). Les régions hors de Chine, telles que ap-southeast-1 (Singapour), sont également prises en charge. Pour plus d'informations, consultez la section ID de région VOD.

    setMultipartUpload

    Définit le seuil et la taille des parties pour le téléchargement multipartie.

    uploadProgressCallback

    La fonction de rappel pour la progression du téléchargement. Vous pouvez réécrire cette fonction.

    setEnableCrc

    Indique s'il faut activer le contrôle de redondance cyclique (CRC) pendant le téléchargement. Cette option est activée par défaut.

  • ChangeLog.txt : Contient l'historique des versions. La première ligne indique le numéro de version actuel du SDK et la date de publication.

Le répertoire samples

  • uploadVideo.py : Exemple de code pour le téléchargement de vidéos.

  • uploadImage.py : Exemple de code pour le téléchargement d'images.

  • uploadAttachedMedia.py : Exemple de code pour le téléchargement de fichiers de ressources multimédias auxiliaires.

Scénario 1 : Télécharger des fichiers audio et vidéo

Télécharger des fichiers standards

Vous pouvez télécharger les types de fichiers audio et vidéo suivants :

  • Fichiers locaux : Le téléchargement multipartie est utilisé. La taille maximale d'un seul fichier est de 48,8 To. La reprise de téléchargement n'est pas prise en charge. Pour plus d'informations, consultez la fonction testUploadLocalVideo dans l'exemple de code.

  • Fichiers web : Vous pouvez spécifier une URL de fichier pour le téléchargement. La taille maximale d'un seul fichier est de 48,8 To. Cette méthode nécessite le téléchargement du fichier web sur un disque local avant l'envoi. Assurez-vous que votre disque local dispose d'un espace suffisant. Pour plus d'informations, consultez la fonction testUploadWebVideo dans l'exemple de code.

Cliquez pour afficher l'exemple de code

# -*- coding: UTF-8 -*-
from voduploadsdk.AliyunVodUtils import *
from voduploadsdk.AliyunVodUploader import AliyunVodUploader
from voduploadsdk.UploadVideoRequest import UploadVideoRequest 
# Test uploading a local audio or video file
def testUploadLocalVideo(accessKeyId, accessKeySecret, filePath, storageLocation=None):
    try:
        # You can specify the region where the upload script is deployed. If the ECS region is the same as the ApsaraVideo VOD storage region, the upload is automatically performed over the internal network. This is faster and saves Internet traffic.
        # ecsRegionId ="cn-shanghai"
        # uploader = AliyunVodUploader(accessKeyId, accessKeySecret, ecsRegionId)
        # Do not specify the ECS region where the upload script is deployed.
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadVideoRequest = UploadVideoRequest(filePath, 'exampleTitle')
        # You can set a video thumbnail. If it is a local or web image, you can use UploadImageRequest to upload the image to ApsaraVideo VOD and obtain the ImageURL.
        # ImageURL example: https://example.com/sample-****.jpg
        #uploadVideoRequest.setCoverURL('<your Image URL>')  
        # Tags
        #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)
# Test uploading a web audio or video file
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)
####  Run the test code   ####   
# The AccessKey of an Alibaba Cloud account has permissions on all APIs. We recommend that you use the AccessKey of a RAM user for API calls or routine O&M.
# Do not store your AccessKey ID and AccessKey secret in your project code. This can lead to a leak of your AccessKey and compromise the security of all resources under your account.
# This example reads the AccessKey from environment variables for identity verification. Before you run the sample code, configure the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables.
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)
# fileURL example: http://video.developer.aliyundoc.com/video/sample-****.mp4
fileUrl = '<your file URL>'
#testUploadWebVideo(accessKeyId, accessKeySecret, fileUrl)

Télécharger des fichiers M3U8

Cliquez pour afficher l'exemple de code

# -*- coding: UTF-8 -*-
from voduploadsdk.AliyunVodUtils import *
from voduploadsdk.AliyunVodUploader import AliyunVodUploader
from voduploadsdk.UploadVideoRequest import UploadVideoRequest
# Test uploading a local M3U8 video
def testUploadLocalM3u8(accessKeyId, accessKeySecret, m3u8LocalFile):
    try:
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadVideoRequest = UploadVideoRequest(m3u8LocalFile, 'exampleTitle')
        # uploadVideoRequest.setTemplateGroupId('<TemplateGroupId>')
        # The segment files and the M3U8 file are in the same directory. The SDK automatically parses and uploads them.
        videoId = uploader.uploadLocalM3u8(uploadVideoRequest)
        print("file: %s, videoId: %s" % (uploadVideoRequest.filePath, videoId))
    except AliyunVodException as e:
        print(e)
# Test uploading a web M3U8 video
def testUploadWebM3u8(accessKeyId, accessKeySecret, m3u8FileUrl):
    try:
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadVideoRequest = UploadVideoRequest(m3u8FileUrl, 'exampleTitle')
        # Parse the segment file URLs. This applies when the segment URLs have the same signature as the M3U8 file or have no signature. In other cases, you need to parse them yourself.
        sliceFileUrls = uploader.parseWebM3u8(m3u8FileUrl)
        videoId = uploader.uploadWebM3u8(uploadVideoRequest, sliceFileUrls)
        print("file: %s, videoId: %s" % (uploadVideoRequest.filePath, videoId))
    except AliyunVodException as e:
        print(e)
####  Run the test code   ####
# The AccessKey of an Alibaba Cloud account has permissions on all APIs. We recommend that you use the AccessKey of a RAM user for API calls or routine O&M.
# Do not store your AccessKey ID and AccessKey secret in your project code. This can lead to a leak of your AccessKey and compromise the security of all resources under your account.
# This example reads the AccessKey from environment variables for identity verification. Before you run the sample code, configure the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables.
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)
            

Accélération du téléchargement

Pour télécharger des fichiers volumineux (de l'ordre du Go ou du To) ou effectuer des téléchargements interrégionaux, tels que le téléchargement d'une vidéo depuis la Chine continentale vers une adresse de stockage dans la région de stockage Singapour, vous pouvez activer la fonctionnalité d'accélération du téléchargement. Pour plus d'informations, consultez la section Activer l'accélération du téléchargement. Après avoir activé cette fonctionnalité, vous devez ajouter la paire clé-valeur AccelerateConfig key-value à l'objet UserData dans la configuration de téléchargement. Si l'objet UserData n'existe pas, vous devez le créer. Voici un exemple :

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

Description des paramètres

Nom

Type

Description

Type

string

Le type d'accélération de téléchargement à activer. Seule la valeur oss est prise en charge.

Domain

string

Le nom de domaine accéléré de votre bucket. Le protocole par défaut est HTTPS.

Remarque

Utilisez un nom de domaine accéléré attribué après l'activation, par exemple vod-***.oss-accelerate.aliyuncs.com.

Scénario 2 : Télécharger des images

Cliquez pour afficher l'exemple de code

# -*- coding: UTF-8 -*-
from voduploadsdk.AliyunVodUtils import *
from voduploadsdk.AliyunVodUploader import AliyunVodUploader
from voduploadsdk.UploadImageRequest import UploadImageRequest
# Test uploading a local image
def testUploadLocalImage(accessKeyId, accessKeySecret, filePath):
    try:
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadImageRequest = UploadImageRequest(filePath)
        uploadImageRequest.setTitle('exampleTitle')  # Set the image title. The default value is empty.
        imageId, imageUrl = uploader.uploadImage(uploadImageRequest, True)
        print("file: %s, imageId: %s, imageUrl: %s" % (uploadImageRequest.filePath, imageId, imageUrl))
    except AliyunVodException as e:
        print(e)
# Test uploading a web image
def testUploadWebImage(accessKeyId, accessKeySecret, fileUrl):
    try:
        uploader = AliyunVodUploader(accessKeyId, accessKeySecret)
        uploadImageRequest = UploadImageRequest(fileUrl)
        uploadImageRequest.setTitle('exampleTitle')  # Set the image title. The default value is empty.
        imageId, imageUrl = uploader.uploadImage(uploadImageRequest, False)
        print("file: %s, imageId: %s, imageUrl: %s" % (uploadImageRequest.filePath, imageId, imageUrl))
    except AliyunVodException as e:
        print(e)
####  Run the test code   ####
# The AccessKey of an Alibaba Cloud account has permissions on all APIs. We recommend that you use the AccessKey of a RAM user for API calls or routine O&M.
# Do not store your AccessKey ID and AccessKey secret in your project code. This can lead to a leak of your AccessKey and compromise the security of all resources under your account.
# This example reads the AccessKey from environment variables for identity verification. Before you run the sample code, configure the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables.
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)
            

Scénario 3 : Télécharger des ressources multimédias auxiliaires

Cliquez pour afficher l'exemple de code

# -*- coding: UTF-8 -*-
from voduploadsdk.AliyunVodUtils import *
from voduploadsdk.AliyunVodUploader import AliyunVodUploader
from voduploadsdk.UploadAttachedMediaRequest import UploadAttachedMediaRequest
# Test uploading a local auxiliary media asset (such as a watermark or caption file)
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)
# Test uploading a web auxiliary media asset (such as a watermark or caption file)
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)
####  Run the test code   ####
# The AccessKey of an Alibaba Cloud account has permissions on all APIs. We recommend that you use the AccessKey of a RAM user for API calls or routine O&M.
# Do not store your AccessKey ID and AccessKey secret in your project code. This can lead to a leak of your AccessKey and compromise the security of all resources under your account.
# This example reads the AccessKey from environment variables for identity verification. Before you run the sample code, configure the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables.
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

Lorsque vous utilisez l'exemple de code pour télécharger un flux vidéo web, si l'erreur ERROR:root:Download fail: [Errno 2] No such file or directory est signalée, vous pouvez résoudre le problème en créant manuellement un dossier dlfiles dans le même répertoire que le dossier 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