すべてのプロダクト
Search
ドキュメントセンター

ApsaraVideo VOD:OSS SDK を使用したメディアファイルのアップロード

最終更新日:Aug 28, 2026

アップロード SDK は OSS SDK をラップしてアップロードを簡素化します。アップロードプロセスをより細かく制御する必要がある場合は、OSS SDK を直接使用してください。

SDK のサポート

OSS SDK は、Java、Python、Go、PHP、Node.js、Ruby、および iOS、Android、HarmonyOS などのクライアントプラットフォームをサポートしています。詳細については、「概要」をご参照ください。

ワークフロー

サーバーサイドアップロード

アプリケーションサーバーは、OSS SDK (Java、Python、PHP など) を使用してファイルをアップロードします。サーバーは信頼できる環境であるため、アクセスキーペアを直接使用できます。サーバーは ApsaraVideo VOD API を呼び出してアップロード URL と認証情報を取得し、OSS SDK を介してアップロードします。

image

クライアントサイドアップロード

クライアント (Web ブラウザーまたはモバイルアプリ) は、OSS SDK を介してファイルをアップロードします。アクセスキーペアを安全に保つために、アプリケーションサーバーに認可サービスをセットアップします。クライアントはこのサービスから一時的なアップロード URL と認証情報をリクエストし、Object Storage Service (OSS) に直接アップロードします。

image

  • アプリケーションサーバーが ApsaraVideo VOD からアップロード URL と認証情報を取得する詳細な手順とコード例については、「アップロード URL と認証情報の取得」をご参照ください。

  • レスポンスには、Base64 エンコードされたアップロード URL (UploadAddress)、認証情報 (UploadAuth)、およびメディアアセット ID が含まれます。これらの値をデコードして解析し、OSS SDK を初期化します。

    説明
    • UploadAddress フィールドにはターゲットの OSS バケット情報が含まれ、UploadAuth フィールドには STS トークンを含む認可の詳細が含まれます。両方のフィールドを Base64 デコードして、OSS SDK クライアントを初期化します。詳細については、「リファレンス:アップロード URL と認証情報のデコード」をご参照ください。

    • ApsaraVideo VOD は自動的にメディアアセットエントリを作成し、アップロード認証情報とともにメディアアセット ID を返します。この ID はメディア管理、再生、および処理に必要となるため、保存してください。

      • VideoId は、動画のアップロード URL と認証情報を取得すると返されます。

      • ImageId は、画像のアップロード URL と認証情報を取得したときに返されます。

      • 補助メディアアセットのアップロード URL と認証情報を取得すると、MediaId が返されます。

  • アクセスキーペアは、Alibaba Cloud アカウントまたは RAM ユーザー (Resource Access Management) の認証情報であり、特定のサービスに固有のものではありません。ApsaraVideo VOD と OSS は同じアクセスキーペアを使用します。ApsaraVideo VOD や OSS など、アカウントで有効になっているすべての Alibaba Cloud サービスの API を呼び出すために、同じ AccessKey ID と AccessKey Secret を使用できます。サービスごとに個別のアクセスキーペアを作成する必要はありません。

デモのダウンロード

デモのソースコード:

プログラムによる統合

次の Java の例は、完全な統合を示しています。

前提条件

  • ApsaraVideo VOD がアクティブ化されていること。詳細については、「ApsaraVideo VOD をアクティブ化する」をご参照ください。

  • 指定リージョンのストレージパスやコールバック設定など、アップロードに必要なシステム設定が構成されていること。詳細については、「ストレージバケットを管理する」および「コールバックを設定する」をご参照ください。

  • RAM ユーザーが作成され、ApsaraVideo VOD へのアクセスに使用されていること。Alibaba Cloud アカウントの AccessKey ペアの漏洩によるセキュリティリスクを防ぐため、RAM ユーザーを作成し、ApsaraVideo VOD へのアクセスに必要な権限を RAM ユーザーに付与することをお勧めします。その後、RAM ユーザーの AccessKey ペア を使用して ApsaraVideo VOD にアクセスできます。詳細については、「RAM ユーザーを作成して権限を付与する」をご参照ください。

  • ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を設定します。詳細については、「Linux、macOS、および Windows で環境変数を設定する」をご参照ください。

    重要
    • Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。 API 操作の呼び出しや日常的な O&M の実行には、RAM ユーザーの AccessKey ペアを使用することをお勧めします。

    • AccessKey ID と AccessKey シークレットをプロジェクトコードにハードコードしないことをお勧めします。 そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。

  • オプション。Security Token Service ( STS ) を使用して ApsaraVideo VOD にアクセスする場合、RAM ユーザーのロールが作成され、そのロールには ApsaraVideo VOD へのアクセスに必要な権限が付与されます。詳細については、「STS を使用して動画をアップロードする」をご参照ください。

    説明

    詳細については、「クレデンシャルと STS の比較」をご参照ください。

環境要件

  • Java 1.8 以降が必要です。

  • ターミナルで java -version コマンドを実行して、Java バージョンを確認できます。

サンプルコード

SDK V1.0

手順 1. 依存関係のインストール

<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>

手順 2. ファイルのアップロード

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;

/**
 * 説明
 */
public class UploadDemo {

    public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {
        // ApsaraVideo VOD サービスが有効化されているリージョンを指定します。たとえば、サービスが中国 (上海) リージョンで有効化されている場合、値を cn-shanghai に設定します。他のリージョンの詳細については、「メディアアップロードの概要」をご参照ください。
        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("これは説明です");
        //request.setTags("タグ1,タグ2");
        // CoverURL の例:http://example.aliyundoc.com/test_cover_****.jpg
        //request.setCoverURL("<ご自身のCoverURL>");
        //request.setCateId(-1L);
        //request.setTemplateGroupId("");
        //request.setWorkflowId("");
        //request.setStorageLocation("");
        //request.setAppId("app-1000000");
        // リクエストタイムアウト期間を設定します。
        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) {
        // Alibaba Cloud アカウントのアクセスキーペアは、すべての API に対する権限を持っています。API アクセスや日常の O&M には、RAM ユーザーのアクセスキーを使用することを推奨します。
        // プロジェクトコードに AccessKey ID と AccessKey Secret をハードコードしないでください。ハードコードすると、アクセスキーペアが漏洩し、アカウント内のすべてのリソースのセキュリティが脅かされる可能性があります。
        // この例では、環境変数から取得したアクセスキーペアを使用して、API アクセスのための ID 検証を実装する方法を示します。サンプルコードを実行する前に、ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を設定してください。
        // ご自身の AccessKey ID。
        String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        // ご自身の AccessKey Secret。
        String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
        // ApsaraVideo VOD にアップロードするローカルビデオファイルのフルパス。パスにはファイル名拡張子を含める必要があります。
        String localFile = "/Users/yours/Video/testVideo.flv";
        try {
            // ApsaraVideo VOD クライアントを初期化し、アップロード URL と認証情報を取得します。
            DefaultAcsClient vodClient = initVodClient(accessKeyId, accessKeySecret);
            CreateUploadVideoResponse createUploadVideoResponse = createUploadVideo(vodClient);
            // 操作が成功すると、VideoId、UploadAddress、UploadAuth が返されます。
            String videoId = createUploadVideoResponse.getVideoId();

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

            // UploadAuth と UploadAddress を使用して OSS クライアントを初期化します。
            OSSClient ossClient = initOssClient(uploadAuth, uploadAddress);
            // ファイルをアップロードします。アップロードは同期的であり、スレッドをブロックすることに注意してください。所要時間はファイルサイズとアップストリーム帯域幅によって異なります。
            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

手順 1. 依存関係のインストール

    <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>

手順 2. ファイルのアップロード

説明

アクセスキーペアをハードコードしない、より安全な認証情報の設定方法を使用することを推奨します。詳細については、「認証情報の管理」をご参照ください。

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 {

    /**
     * 説明 :
     * 

認証情報を使用してクライアントを初期化します。

* @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); // サービスエンドポイント。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); // 成功すると、レスポンスに VideoId、UploadAddress、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) { // これはデモンストレーション用です。本番環境では、例外を慎重に処理し、無視しないでください。 // エラーメッセージ。 System.out.println(error.getMessage()); // 診断アドレス。 System.out.println(error.getData().get("Recommend")); com.aliyun.teautil.Common.assertAsString(error.message); } catch (Exception _error) { TeaException error = new TeaException(_error.getMessage(), _error); // これはデモンストレーション用です。本番環境では、例外を慎重に処理し、無視しないでください。 // エラーメッセージ。 System.out.println(error.getMessage()); // 診断アドレス。 System.out.println(error.getData().get("Recommend")); com.aliyun.teautil.Common.assertAsString(error.message); } } /** * OSS クライアントを初期化します。 * @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"); String region = uploadAuth.getString("Region"); 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(region) .build(); return ossClient; } /** * ローカルファイルをアップロードします * @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)); } /** * 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; } }

リファレンス:アップロード URL と認証情報のデコード

UploadAddressUploadAuth を Base64 デコードして、OSS クライアントの初期化に用いる 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;
  }

表 1. デコードされた UploadAddress フィールド

フィールド

説明

Bucket

VOD ストレージバケット。

Endpoint

ストレージリージョンのエンドポイント。

FileName

VOD がアップロードされたファイルに割り当てるファイル名。

ObjectPrefix

M3U8 ファイルのアップロード時にのみ返されます。

表 2. デコード後の UploadAuth フィールド

フィールド

説明

AccessKeyId

アップロード用の一時的な AccessKey ID。

AccessKeySecret

アップロード用の一時的な AccessKey Secret。

SecurityToken

アップロード用の STS セキュリティトークン。

ExpireUTCTime

認証情報の有効期限 (UTC)。 (yyyy-MM-ddTHH:mm:ssZ)

Expiration

有効期間 (秒単位)。ビデオの場合、3000 秒です。有効期限が切れたら、認証情報を更新してください。

Region

アップロードリージョン ID。