Tous les produits
Search
Centre de documentation

ApsaraVideo VOD:Upload files using the Python SDK

Dernière mise à jour :Aug 10, 2026

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

Vue d'ensemble

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. Le processus de base d'utilisation du SDK de téléchargement Python est le suivant :

  1. Remplissez 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. Cette étape implique la configuration des informations de téléchargement.

  4. L'endpoint par défaut du SDK de téléchargement Python est cn-shanghai (Shanghai). Pour télécharger des fichiers multimédias dans 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 montre comment définir 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.

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

  • Un utilisateur RAM est créé et utilisé pour accéder à ApsaraVideo VOD. Afin d'éviter 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. Vous pouvez ensuite utiliser 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 opérations 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 seront compromises.

  • (Facultatif) Créez un rôle pour l'utilisateur RAM et attribuez-lui les autorisations nécessaires pour accéder à ApsaraVideo VOD si vous souhaitez accéder au service via Security Token Service (STS). 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épendances.

    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 résoudre les problèmes.

  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épendances.

    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

    Vous pouvez ouvrir le fichier ChangeLog.txt dans le répertoire voduploadsdk pour afficher le numéro de version actuel du SDK et sa date de publication.

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

Le répertoire voduploadsdk

  • AliyunVodUtils.py

    Répertoire

    Description

    AliyunVodLog

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

    AliyunVodUtils

    Classe utilitaire du SDK de téléchargement.

    AliyunVodException

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

  • UploadVideoRequest.py

    Répertoire

    Description

    UploadVideoRequest

    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

    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

    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

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

    uploadWebVideo

    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 fragments d'un fichier M3U8 web.

    parseLocalM3u8

    Analyse les informations de fragments 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

    Fonction de rappel pour la progression du téléchargement. Vous pouvez redéfinir cette fonction.

    setEnableCrc

    Indique s'il faut activer la vérification de redondance cyclique (CRC) pendant le téléchargement. 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 sa 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 de télécharger le fichier web sur un disque local avant le transfert. 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 AccelerateConfig clé-valeur à 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