Tous les produits
Search
Centre de documentation

ApsaraVideo VOD:Upload media files using OSS SDKs

Dernière mise à jour :Aug 27, 2026

Le SDK de chargement encapsule le SDK OSS pour simplifier les opérations de téléchargement. Utilisez directement le SDK OSS lorsque vous avez besoin d'un contrôle plus fin sur le processus de chargement.

Prise en charge des SDK

Le SDK OSS prend en charge Java, Python, Go, PHP, Node.js, Ruby ainsi que les plateformes clientes iOS, Android et HarmonyOS. Pour plus d'informations, reportez-vous à Vue d'ensemble.

Flux de travail

Chargement côté serveur

Votre serveur d'application utilise un SDK OSS (Java, Python, PHP, etc.) pour charger les fichiers. Étant donné que le serveur constitue un environnement de confiance, vous pouvez utiliser votre paire AccessKey directement. Le serveur appelle l'API ApsaraVideo VOD pour obtenir une URL de chargement et des informations d'identification, puis effectue le chargement via le SDK OSS.

image

Chargement côté client

Le client (navigateur web ou application mobile) charge les fichiers via le SDK OSS. Afin de garantir la sécurité de votre paire AccessKey, configurez un service d'autorisation sur votre serveur d'application. Le client demande une URL de chargement temporaire et des informations d'identification à ce service, puis effectue le chargement directement vers OSS.

image

Remarque :

  • Pour connaître les étapes détaillées et consulter les exemples de code expliquant comment le serveur d'application obtient l'URL de chargement et les informations d'identification depuis ApsaraVideo VOD, consultez la rubrique Obtenir une URL de chargement et des informations d'identification.

  • La réponse inclut l'URL de chargement encodée en Base64 (UploadAddress), les informations d'identification (UploadAuth), ainsi que l'ID de la ressource multimédia. Décodez et analysez ces valeurs pour initialiser le SDK OSS.

    Remarque
    • Le champ UploadAddress contient les informations du bucket OSS cible, tandis que le champ UploadAuth renferme les détails d'autorisation, y compris un jeton STS. Décodez ces deux champs en Base64 pour initialiser le client du SDK OSS. Consultez la section Référence : Décoder l'URL de chargement et les informations d'identification.

    • ApsaraVideo VOD crée automatiquement une entrée de ressource multimédia et renvoie un ID de ressource avec les informations d'identification de chargement. Enregistrez cet ID, car il est indispensable pour la gestion, la lecture et le traitement des médias.

      • L'identifiant VideoId est renvoyé lorsque vous obtenez une URL de chargement et des informations d'identification pour une vidéo.

      • L'identifiant ImageId est renvoyé lorsque vous obtenez une URL de chargement et des informations d'identification pour une image.

      • L'identifiant MediaId est renvoyé lorsque vous obtenez une URL de chargement et des informations d'identification pour une ressource multimédia auxiliaire.

  • Une paire AccessKey est un identifiant associé à un compte Alibaba Cloud ou à un utilisateur RAM (Resource Access Management) ; elle n'est pas spécifique à un service. ApsaraVideo VOD et Object Storage Service (OSS) utilisent la même paire AccessKey. Vous pouvez employer le même AccessKey ID et AccessKey Secret pour appeler les API de tous les services Alibaba Cloud activés pour votre compte, tels qu'ApsaraVideo VOD et OSS. Il n'est pas nécessaire de créer une paire AccessKey distincte pour chaque service.

Télécharger les démos

Code source des démos :

Intégration programmatique

L'exemple Java suivant illustre l'intégration complète.

Prérequis

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

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

  • Un utilisateur RAM est créé et utilisé 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. Vous pourrez ensuite utiliser la paire AccessKey de l'utilisateur RAM pour accéder au service. Pour plus d'informations, consultez la rubrique 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 rubrique 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 d'API. Utilisez la paire AccessKey d'un utilisateur RAM pour appeler les API ou effectuer les opérations de maintenance courantes.

    • Ne codez pas en dur 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. Un rôle est créé pour l'utilisateur RAM et les autorisations nécessaires pour accéder à ApsaraVideo VOD lui sont attribuées si vous souhaitez accéder au service via Security Token Service (STS). Pour plus d'informations, consultez la rubrique Obtenir un jeton STS.

Configuration requise

  • Java 1.8 ou version ultérieure est requis.

  • Vous pouvez exécuter la commande java -version dans le terminal pour vérifier la version de Java installée.

Exemple de code

SDK V1.0

Étape 1. Installer les dépendances

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-core</artifactId>
  <version>4.6.1</version>
</dependency>
<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-vod</artifactId>
  <version>2.16.32</version>
</dependency>
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.17.4</version>
</dependency>

Étape 2. Charger le fichier

import com.alibaba.fastjson.JSONObject;
import com.aliyun.oss.OSSClient;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.vod.model.v20170321.CreateUploadVideoRequest;
import com.aliyuncs.vod.model.v20170321.CreateUploadVideoResponse;
import org.apache.commons.codec.binary.Base64;

import java.io.File;

/**
 * description
 */
public class UploadDemo {

    public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {
        // Specify the region where the ApsaraVideo VOD service is activated. For example, if the service is activated in the China (Shanghai) region, set the value to cn-shanghai. For more information about other regions, see Overview of media upload.
        String regionId = "cn-shanghai";
        DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
        DefaultAcsClient client = new DefaultAcsClient(profile);
        return client;
    }

    public static CreateUploadVideoResponse createUploadVideo(DefaultAcsClient vodClient) throws ClientException {
        CreateUploadVideoRequest request = new CreateUploadVideoRequest();
        request.setFileName("vod_test.mp4");
        request.setTitle("this is title");
        //request.setDescription("this is desc");
        //request.setTags("tag1,tag2");
        // Example of CoverURL: http://example.aliyundoc.com/test_cover_****.jpg
        //request.setCoverURL("<your CoverURL>");
        //request.setCateId(-1L);
        //request.setTemplateGroupId("");
        //request.setWorkflowId("");
        //request.setStorageLocation("");
        //request.setAppId("app-1000000");
        // Set the request timeout period.
        request.setSysReadTimeout(1000);
        request.setSysConnectTimeout(1000);
        return vodClient.getAcsResponse(request);
    }

    public static OSSClient initOssClient(JSONObject uploadAuth, JSONObject uploadAddress) {
        String endpoint = uploadAddress.getString("Endpoint");
        String accessKeyId = uploadAuth.getString("AccessKeyId");
        String accessKeySecret = uploadAuth.getString("AccessKeySecret");
        String securityToken = uploadAuth.getString("SecurityToken");
        return new OSSClient(endpoint, accessKeyId, accessKeySecret, securityToken);
    }

    public static void uploadLocalFile(OSSClient ossClient, JSONObject uploadAddress, String localFile) {
        String bucketName = uploadAddress.getString("Bucket");
        String objectName = uploadAddress.getString("FileName");
        File file = new File(localFile);
        ossClient.putObject(bucketName, objectName, file);
    }

    public static void main(String[] argv) {
        // The AccessKey pair of an Alibaba Cloud account has permissions on all APIs. We recommend that you use the AccessKey of a RAM user for API access or routine O&M.
        // Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked and threaten the security of all resources in your account.
        // This example shows how to use an AccessKey pair that is obtained from environment variables to implement identity verification for API access. Before you run the sample code, configure the ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variables.
        // Your AccessKey ID.
        String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        // Your AccessKey secret.
        String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        // The full path of the local video file that you want to upload to ApsaraVideo VOD. The path must include the file name extension.
        String localFile = "/Users/yours/Video/testVideo.flv";
        try {
            // Initialize the ApsaraVideo VOD client and obtain the upload URL and credential.
            DefaultAcsClient vodClient = initVodClient(accessKeyId, accessKeySecret);
            CreateUploadVideoResponse createUploadVideoResponse = createUploadVideo(vodClient);
            // If the operation is successful, the VideoId, UploadAddress, and UploadAuth are returned.
            String videoId = createUploadVideoResponse.getVideoId();

            JSONObject uploadAuth = JSONObject.parseObject(decodeBase64(createUploadVideoResponse.getUploadAuth()));
            JSONObject uploadAddress = JSONObject.parseObject(decodeBase64(createUploadVideoResponse.getUploadAddress()));

            // Use UploadAuth and UploadAddress to initialize the OSS client.
            OSSClient ossClient = initOssClient(uploadAuth, uploadAddress);
            // Upload the file. Note that the upload is synchronous and blocks the thread. The time consumed depends on the file size and the upstream bandwidth.
            uploadLocalFile(ossClient, uploadAddress, localFile);
            System.out.println("Put local file succeed, VideoId : " + videoId);
        } catch (Exception e) {
            System.out.println("Put local file fail, ErrorMessage : " + e.getLocalizedMessage());
        }
    }

    private static String decodeBase64(String data) {
        return new String(Base64.decodeBase64(data));
    }
}
                

SDK V2.0

Étape 1. Installer les dépendances

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>vod20170321</artifactId>
      <version>3.6.4</version>
    </dependency>
    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>tea-openapi</artifactId>
      <version>0.3.8</version>
    </dependency>
    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>tea-console</artifactId>
      <version>0.0.1</version>
    </dependency>
    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>tea-util</artifactId>
      <version>0.2.23</version>
    </dependency>
    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>credentials-java</artifactId>
      <version>1.0.1</version>
    </dependency>
    <dependency>
      <groupId>com.aliyun.oss</groupId>
      <artifactId>aliyun-sdk-oss</artifactId>
      <version>3.17.4</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.83</version>
    </dependency>

Étape 2. Charger le fichier

Remarque

Nous vous recommandons d'utiliser une méthode de configuration des informations d'identification plus sécurisée qui évite de coder en dur la paire AccessKey. Pour plus de détails, consultez la rubrique Gérer les informations d'identification.

package com.aliyun.sample;
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.PutObjectResult;
import com.aliyun.tea.*;
import com.alibaba.fastjson.JSONObject;
import java.io.File;
import org.apache.commons.codec.binary.Base64;

public class Sample {

    /**
     * <b>description</b> :
     * <p>Initialize the client using credentials.</p>
     * @return Client
     * 
     * @throws Exception
     */
    public static com.aliyun.vod20170321.Client createClient() throws Exception {
        com.aliyun.credentials.models.Config creditConfig = new com.aliyun.credentials.models.Config();
        creditConfig.setType("access_key")
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));

        com.aliyun.credentials.Client credential = new com.aliyun.credentials.Client(creditConfig);
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                .setCredential(credential);
        // The service endpoint. Refer to https://api.alibabacloud.com/product/vod.
        config.endpoint = "vod.cn-shanghai.aliyuncs.com";
        return new com.aliyun.vod20170321.Client(config);
    }

    public static void main(String[] args_) throws Exception {
        
        com.aliyun.vod20170321.Client client = Sample.createClient();
        com.aliyun.vod20170321.models.CreateUploadVideoRequest createUploadVideoRequest = new com.aliyun.vod20170321.models.CreateUploadVideoRequest()
                .setFileName("ecs.mp4")
                .setTitle("ecs");
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            com.aliyun.vod20170321.models.CreateUploadVideoResponse resp = client.createUploadVideoWithOptions(createUploadVideoRequest, runtime);
            // On success, the response contains VideoId, UploadAddress, and UploadAuth.
            String videoId = resp.getBody().videoId;
            String localFile = "/Users/yours/ecs.mp4";

            JSONObject uploadAuth = JSONObject.parseObject(decodeBase64(resp.getBody().uploadAuth));
            JSONObject uploadAddress = JSONObject.parseObject(decodeBase64(resp.getBody().uploadAddress));

            OSS ossClient = initOssClient(uploadAuth, uploadAddress);
            uploadLocalFile(ossClient, uploadAddress, localFile);

            System.out.println("Put local file succeed, VideoId : " + videoId);
        } catch (TeaException error) {
            // This is for demonstration only. In production, handle exceptions carefully and do not ignore them.
            // Error message.
            System.out.println(error.getMessage());
            // Diagnostic address.
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // This is for demonstration only. In production, handle exceptions carefully and do not ignore them.
            // Error message.
            System.out.println(error.getMessage());
            // Diagnostic address.
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }        
    }

    /**
     * Initialize OSS client.
     * @param uploadAuth
     * @param uploadAddress
     * @return
     */
    public static OSS initOssClient(JSONObject uploadAuth, JSONObject uploadAddress) {
        String endpoint = uploadAddress.getString("Endpoint");
        String accessKeyId = uploadAuth.getString("AccessKeyId");
        String accessKeySecret = uploadAuth.getString("AccessKeySecret");
        String securityToken = uploadAuth.getString("SecurityToken");

        com.aliyun.credentials.models.Config creditConfig = new com.aliyun.credentials.models.Config()
                .setAccessKeyId(accessKeyId)
                .setAccessKeySecret(accessKeySecret)
                .setSecurityToken(securityToken);

        DefaultCredentialProvider credentialsProvider = new CredentialsProviderFactory()
                .newDefaultCredentialProvider(accessKeyId, accessKeySecret, securityToken);

        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V1);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(endpoint)
                .build();

        return ossClient;
    }

    /**
     * Upload the local file
     * @param ossClient
     * @param uploadAddress
     * @param localFile
     * @throws Exception
     */
    public static void uploadLocalFile(OSS ossClient, JSONObject uploadAddress, String localFile) throws Exception {
        String bucketName = uploadAddress.getString("Bucket");
        String objectName = uploadAddress.getString("FileName");
        File file = new File(localFile);
        PutObjectResult result = ossClient.putObject(bucketName, objectName, file);
        com.aliyun.teaconsole.Client.log(com.aliyun.teautil.Common.toJSONString(result));
    }

    /**
     * Decode UploadAuth/UploadAddress
     * @param s
     * @return
     */
    public static String decodeBase64(String s) {
        byte[] b = null;
        String result = null;
        if (s != null) {
            Base64 decoder = new Base64();
            try {
                b = decoder.decode(s);
                result = new String(b, "utf-8");
            } catch (Exception e) {
            }
        }
        return result;
    }
}

Référence : Décoder l'URL de chargement et les informations d'identification

Décodez en Base64 les champs UploadAddress et UploadAuth afin d'obtenir le point de terminaison OSS et les détails d'autorisation nécessaires à l'initialisation du client OSS :

  import org.apache.commons.codec.binary.Base64;
  
  
  public static String decodeBase64(String s) {
      byte[] b = null;
      String result = null;
      if (s != null) {
          Base64 decoder = new Base64();
          try {
              b = decoder.decode(s);
              result = new String(b, "utf-8");
          } catch (Exception e) {
          }
      }
      return result;
  }

Tableau 1. Champs décodés de UploadAddress

Champ

Description

Bucket

Le bucket de stockage VOD.

Endpoint

Le point de terminaison de la région de stockage.

FileName

Le nom de fichier attribué par VOD au fichier chargé.

ObjectPrefix

Renvoyé uniquement lors du chargement d'un fichier M3U8.

Tableau 2. Champs décodés de UploadAuth

Champ

Description

AccessKeyId

ID AccessKey temporaire pour le chargement.

AccessKeySecret

Secret AccessKey temporaire pour le chargement.

SecurityToken

Jeton de sécurité STS pour le chargement.

ExpireUTCTime

Date d'expiration des informations d'identification au format UTC (yyyy-MM-ddTHH:mm:ssZ).

Expiration

Durée de validité en secondes. Pour les vidéos, cette durée est de 3 000 secondes. Actualisez les informations d'identification après leur expiration.

Region

L'ID de la région de chargement.