このトピックでは、Java 用サーバーサイドアップロード SDK を使用して、さまざまなメディアファイルを ApsaraVideo VOD ストレージにアップロードする方法の例を説明します。
概要
Java アップロード SDK は、他の ApsaraVideo VOD サーバーサイド SDK と同じ一般的なプロセスに従います。詳細については、「アップロードプロセス」をご参照ください。Java アップロード SDK を使用するための基本的な手順は次のとおりです。
前提条件を満たします。詳細については、「前提条件」をご参照ください。
Java アップロード SDK を統合します。詳細については、「Java アップロード SDK の統合」をご参照ください。
アップロードロジックを実装します。この手順では、主にアップロード情報を設定します。
音声ファイルと動画ファイルをアップロードするには、「シナリオ 1:音声ファイルと動画ファイルのアップロード」をご参照ください。
画像をアップロードするには、「シナリオ 2:画像のアップロード」をご参照ください。
補助メディアアセットをアップロードするには、「シナリオ 3:補助メディアアセットのアップロード」をご参照ください。
より高度な機能については、「高度な機能」をご参照ください。
前提条件
ApsaraVideo VOD が有効化されていること。詳細については、「ApsaraVideo VOD の有効化」をご参照ください。
指定されたリージョン内のストレージパスやコールバック設定など、アップロードに必要なシステム設定が構成されていること。詳細については、「ストレージバケットの管理」および「コールバックの設定」をご参照ください。
RAM ユーザーが作成され、ApsaraVideo VOD へのアクセスに使用されること。Alibaba Cloud アカウントの AccessKey ペアの漏洩によるセキュリティリスクを防ぐため、RAM ユーザーを作成し、その RAM ユーザーに ApsaraVideo VOD へのアクセスに必要な権限を付与することを推奨します。その後、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 Secret をプロジェクトコードにハードコーディングしないことを強く推奨します。ハードコーディングすると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
任意。Security Token Service (STS) を使用して ApsaraVideo VOD にアクセスする場合、RAM ユーザー用のロールが作成され、そのロールに ApsaraVideo VOD へのアクセスに必要な権限が付与されていること。詳細については、「STS トークンの取得」をご参照ください。
Java アップロード SDK の統合
このトピックでは、Java 1.8 以降と Java アップロード SDK V1.4.15 を使用して統合手順を説明します。必要に応じて他のバージョンも使用できます。アップロード SDK は依存関係の統合をサポートしていません。JAR パッケージをダウンロードしてインポートする必要があります。統合中に問題が発生した場合は、「よくある質問」をご参照ください。
Java アップロード SDK とサンプルコードをダウンロードします。
SDK バージョン:1.4.15
更新日時:2022-11-03
ダウンロードアドレス:V1.4.15 SDK とデモソースコード
Java アップロード SDK とサンプルコードを解凍します。
この例では、VODUploadDemo-java-1.4.15.zip パッケージを使用します。パッケージを解凍すると、次のサブフォルダーが作成されます。
lib:Java アップロード SDK に必要な JAR パッケージを格納します。sample:Java アップロード SDK のサンプルコードを格納します。
JAR パッケージをインポートします。
Eclipse を使用している場合は、プロジェクトを右クリックし、[Properties] > [Java Build Path] > [Add JARs] を選択します。解凍した VODUploadDemo-java-1.4.15 フォルダーに移動し、
libディレクトリからすべての jar ファイルをプロジェクトに追加します。IntelliJ IDEA を使用している場合は、プロジェクトを開き、[File] > [Project Structure] > [Modules] を選択します。[Dependencies] タブで、[+] アイコンをクリックし、[JARs or directories] を選択します。解凍した VODUploadDemo-java-1.4.15 フォルダーに移動し、
libディレクトリからすべての jar ファイルをプロジェクトに追加します。
重要JAR パッケージをインポートした後、依存関係も設定する必要があります。
Alibaba Cloud SDK for Java、OSS SDK、ApsaraVideo VOD SDK、ApsaraVideo VOD サーバーサイドアップロード SDK などの依存関係を追加できます。
重要上記のすべての依存関係をインポートする必要があります。そうしないと、統合は失敗します。
最新の JAR パッケージ (aliyun-java-vod-upload-1.4.15.jar) を使用する場合、aliyun-sdk-oss のバージョンが 3.9.0 以降、aliyun-java-sdk-vod のバージョンが 2.16.11 以降であることを確認してください。
ApsaraVideo VOD は、中国本土の中国 (上海)、中国 (深セン)、中国 (北京) リージョンで利用できます。アップロード SDK V1.4.14 以前を使用して中国 (深セン) または中国 (北京) リージョンにファイルをアップロードする場合、aliyun-java-sdk-vod のバージョンが 2.15.11 以降、aliyun-java-sdk-core のバージョンが 4.4.5 以降であることを確認してください。アップロード SDK V1.4.15 以降を使用して中国 (深セン) または中国 (北京) リージョンにファイルをアップロードする場合、aliyun-java-sdk-vod のバージョンが 2.16.11 以降、aliyun-java-sdk-core のバージョンが 4.4.5 以降であることを確認してください。
依存関係を展開して表示
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.5.1</version> </dependency> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.10.2</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-vod</artifactId> <version>2.16.11</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20170516</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.2</version> </dependency> <dependency> <groupId>com.aliyun.vod</groupId> <artifactId>upload</artifactId> <version>1.4.15</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/resources/aliyun-java-vod-upload-1.4.15.jar</systemPath> </dependency>
シナリオ 1:音声ファイルと動画ファイルのアップロード
通常の音声ファイルと動画ファイル
以下のいずれかの方法で音声ファイルと動画ファイルをアップロードできます。
ローカルファイルのアップロード。このメソッドはマルチパートアップロードを使用し、再開可能なアップロードをサポートします。詳細については、サンプルコードの
testUploadVideo関数をご参照ください。再開可能なアップロードが無効になっている場合、アップロードタスクは最大 3,000 秒間実行できます。アップロードできるファイルの最大サイズは、ネットワーク帯域幅とディスク I/O パフォーマンスに依存します。
再開可能なアップロードが有効になっている場合、最大 48.8 TB の単一ファイルをアップロードできます。
重要再開可能なアップロードを有効にすると、アップロード中にアップロードの進行状況がローカルディスクファイルに書き込まれます。これにより、アップロード速度が影響を受ける可能性があります。ファイルサイズに基づいてこの機能を有効にするかどうかを決定することを推奨します。
ネットワークストリームのアップロード。ファイル URL を指定してファイルをアップロードできます。このメソッドは再開可能なアップロードをサポートし、最大 48.8 TB の単一ファイルをアップロードできます。このメソッドでは、アップロードする前にネットワークファイルをローカルディスクにダウンロードする必要があります。ローカルディスクに十分な空き容量があることを確認してください。詳細については、サンプルコードの
testUploadURLStream関数をご参照ください。ファイルストリームのアップロード。ローカルファイルを指定してアップロードできます。このメソッドは再開可能なアップロードをサポートしておらず、最大 5 GB の単一ファイルをアップロードできます。詳細については、サンプルコードの
testUploadFileStream関数をご参照ください。ストリーミングアップロードの使用。ファイルストリームやネットワークストリームなどの入力ストリームを指定してアップロードできます。このメソッドは再開可能なアップロードをサポートしておらず、最大 5 GB の単一ファイルをアップロードできます。詳細については、サンプルコードの
testUploadStream関数をご参照ください。
サンプルコードを使用する場合、対応するクラスを手動でインポートする必要があります。コード実行中に依存関係が見つからないなどの問題を解決するには、「よくある質問」をご参照ください。
サンプルコードを展開して表示
public class UploadVideoDemo {
// 必須。AccessKey ペアを指定します。
// Alibaba Cloud アカウントの AccessKey ペアは、すべての API へのアクセス権限を持っています。API 呼び出しや日常の O&M には、RAM ユーザーの AccessKey ペアを使用することを推奨します。
// AccessKey ID と AccessKey Secret をプロジェクトコードにハードコーディングしないことを強く推奨します。ハードコーディングすると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
// この例では、環境変数から AccessKey ペアを読み取って API アクセスを認証する方法を示します。サンプルコードを実行する前に、ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を設定してください。
private static final String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
private static final String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
public static void main(String[] args) {
// 動画ファイルをアップロードします。
// 動画のタイトル。このパラメーターは必須です。
String title = "Test Title";
// 1. ローカルファイルのアップロードとファイルストリームのアップロードの場合、ファイル名をアップロードファイルの絶対パスに設定します (例:/User/sample/FileName.mp4)。このパラメーターは必須です。
// 2. ネットワークストリームのアップロードの場合、ファイル名をソースファイル名に設定します (例:FileName.mp4)。このパラメーターは必須です。
// 3. ストリーミングアップロードの場合、ファイル名をソースファイル名に設定します (例:FileName.mp4)。このパラメーターは必須です。
// アップロード方法に関係なく、ファイル名にはファイル名拡張子を含める必要があります。
String fileName = "/Users/test/video/test.mp4";
// ローカルファイルをアップロードします。
testUploadVideo(accessKeyId, accessKeySecret, title, fileName);
// アップロードする動画のネットワークストリームの URL。
String url = "http://test.aliyun.com/video/test.mp4";
// 2. ネットワークストリームをアップロードします。
// ファイル名拡張子。URL にファイル名拡張子が含まれていない場合は、このパラメーターを設定する必要があります。
String fileExtension = "mp4";
testUploadURLStream(accessKeyId, accessKeySecret, title, url, fileExtension);
// 3. ファイルストリームをアップロードします。
testUploadFileStream(accessKeyId, accessKeySecret, title, fileName);
// 4. ストリーミングアップロード (ファイルストリーム、ネットワークストリームなど)。
InputStream inputStream = null;
// 4.1 ファイルストリーム。
try {
inputStream = new FileInputStream(fileName);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// 4.2 ネットワークストリーム。
try {
inputStream = new URL(url).openStream();
} catch (IOException e) {
e.printStackTrace();
}
testUploadStream(accessKeyId, accessKeySecret, title, fileName, inputStream);
}
/**
* ローカルファイルアップロード用の API。
*
* @param accessKeyId
* @param accessKeySecret
* @param title
* @param fileName
*/
private static void testUploadVideo(String accessKeyId, String accessKeySecret, String title, String fileName) {
UploadVideoRequest request = new UploadVideoRequest(accessKeyId, accessKeySecret, title, fileName);
/* マルチパートアップロードの各パートのサイズ。デフォルト値:2 MB。*/
request.setPartSize(2 * 1024 * 1024L);
/* マルチパートアップロードの同時スレッド数。デフォルト値:1。注意:この設定はサーバーの CPU リソースを消費します。サーバーのパフォーマンスに基づいてスレッド数を指定してください。*/
request.setTaskNum(1);
/* 再開可能なアップロードを有効にするかどうかを指定します。デフォルト値:false。ネットワークが不安定な場合やプログラムがクラッシュした場合、同じアップロードリクエストを送信することでアップロードタスクを再開できます。この機能は、3,000 秒以内にアップロードできない大きなファイルに適しています。
注意:再開可能なアップロードを有効にすると、アップロード中にアップロードの進行状況がローカルディスクファイルに書き込まれます。これにより、アップロード速度が影響を受けます。必要に応じてこの機能を有効にするか選択してください。*/
//request.setEnableCheckpoint(false);
/* 遅い OSS リクエストをログに記録するためのタイムアウト期間。パートのアップロード時間がこのしきい値を超えると、デバッグログが出力されます。このログを抑制するには、しきい値を調整してください。単位:ミリ秒。デフォルト値:300000。*/
//request.setSlowRequestsThreshold(300000L);
/* 各パートの遅いリクエストをログに記録するための時間しきい値。デフォルト値:300 秒。*/
//request.setSlowRequestsThreshold(300000L);
/* ウォーターマークを表示するかどうかを指定します。このパラメーターは任意です。テンプレートグループ ID を指定すると、テンプレートグループの設定に基づいてウォーターマークが表示されます。*/
//request.setIsShowWaterMark(true);
/* カスタムメッセージコールバック設定とアップロードアクセラレーション設定。このパラメーターは任意です。Extend はカスタム拡張設定を指定します。MessageCallback はメッセージコールバック設定を指定します。AccelerateConfig はアップロードアクセラレーション設定を指定します。使用する前にアップロードアクセラレーション機能を有効化する必要があります。*/
//request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackType\":\"http\",\"CallbackURL\":\"http://example.aliyundoc.com\"},\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");
/* 動画カテゴリ ID。このパラメーターは任意です。*/
//request.setCateId(0);
/* 動画タグ。複数のタグはカンマ (,) で区切ります。このパラメーターは任意です。*/
//request.setTags("Tag 1,Tag 2");
/* 動画の説明。このパラメーターは任意です。*/
//request.setDescription("Video description");
/* サムネイルの URL。このパラメーターは任意です。*/
//request.setCoverURL("http://cover.example.com/image_01.jpg");
/* テンプレートグループ ID。このパラメーターは任意です。*/
//request.setTemplateGroupId("8c4792cbc8694e7084fd5330e5****");
/* ワークフロー ID。このパラメーターは任意です。*/
//request.setWorkflowId("d4430d07361f0*be1339577859b0****");
/* ストレージリージョン。このパラメーターは任意です。*/
//request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
/* デフォルトのアップロード進行状況コールバックを有効にします。*/
//request.setPrintProgress(false);
/* カスタムのアップロード進行状況コールバックを設定します。コールバックは VoDProgressListener を継承する必要があります。*/
/* この機能はデフォルトで無効になっています。この機能を有効にすると、サーバーはアップロード中にログにアップロードの詳細を返します。このメッセージを受信する必要がない場合は、この機能を無効にしてください。*/
//request.setProgressListener(new PutObjectProgressListener());
/* STS 情報を生成するために使用するインターフェイスの実装クラスを設定します。*/
// request.setVoDRefreshSTSTokenListener(new RefreshSTSTokenImpl());
/* アプリケーション ID を設定します。*/
//request.setAppId("app-100****");
/* ApsaraVideo VOD エンドポイント。*/
//request.setApiRegionId("cn-shanghai");
/* ECS デプロイメントリージョン。*/
// request.setEcsRegionId("cn-shanghai");
// ECS デプロイメントリージョンが ApsaraVideo VOD エンドポイントリージョンと同じ場合、内部ネットワークアップロードが自動的に有効になります。
/* プロキシを設定します。このパラメーターは任意です。*/
//OSSConfig ossConfig = new OSSConfig();
/* <必須> プロキシサーバーのホスト。*/
//ossConfig.setProxyHost("<yourProxyHost>");
/* <必須> プロキシサーバーのポート。*/
//ossConfig.setProxyPort(-1);
/* OSS への接続に使用するプロトコル。有効な値:HTTP および HTTPS。デフォルト値:HTTP。*/
//ossConfig.setProtocol("HTTP");
/* ユーザーエージェント。HTTP の User-Agent ヘッダーです。デフォルト値:aliyun-sdk-java。*/
//ossConfig.setUserAgent("<yourUserAgent>");
/* プロキシサーバー認証用のユーザー名。このパラメーターは HTTPS プロトコルで必須です。*/
//ossConfig.setProxyUsername("<yourProxyUserName>");
/* プロキシサーバー認証用のパスワード。このパラメーターは HTTPS プロトコルで必須です。*/
//ossConfig.setProxyPassword("<yourProxyPassword>");
//request.setOssConfig(ossConfig);
UploadVideoImpl uploader = new UploadVideoImpl();
UploadVideoResponse response = uploader.uploadVideo(request);
System.out.print("RequestId=" + response.getRequestId() + "\n"); // ApsaraVideo VOD に送信されたリクエストの ID。
if (response.isSuccess()) {
System.out.print("VideoId=" + response.getVideoId() + "\n");
} else {
/* 指定されたコールバック URL が無効な場合、動画のアップロードには影響しません。VideoId とエラーコードが返されます。その他の場合、アップロードが失敗すると VideoId は空になります。この場合、返されたエラーコードに基づいて失敗の原因を分析してください。*/
System.out.print("VideoId=" + response.getVideoId() + "\n");
System.out.print("ErrorCode=" + response.getCode() + "\n");
System.out.print("ErrorMessage=" + response.getMessage() + "\n");
}
}
/**
* URL を使用してネットワークストリームをアップロードします。このメソッドは再開可能なアップロードをサポートします。最大 48.8 TB の単一ファイルをアップロードできます。
* このメソッドでは、アップロードする前にネットワークファイルをローカルディスクにダウンロードする必要があります。ローカルディスクに十分な空き容量があることを確認してください。
* 指定した URL にファイル名拡張子が含まれていない場合は、fileExtension パラメーターを設定する必要があります。
* @param accessKeyId
* @param accessKeySecret
* @param title
* @param fileExtension
* @param url
*/
private static void testUploadURLStream(String accessKeyId, String accessKeySecret, String title, String url, String fileExtension) {
UploadURLStreamRequest request = new UploadURLStreamRequest(accessKeyId, accessKeySecret, title, url);
/* ファイル名拡張子。*/
request.setFileExtension(fileExtension);
/* ネットワークファイルのダウンロードの接続タイムアウト期間。単位:ミリ秒。値 0 は制限なしを示します。*/
request.setDownloadConnectTimeout(1000);
/* ネットワークファイルのダウンロードの読み取りタイムアウト期間。単位:ミリ秒。値 0 は制限なしを示します。*/
request.setDownloadReadTimeout(0);
/* ダウンロードしたネットワークファイルを保存するローカルディレクトリ。*/
request.setLocalDownloadFilePath("/Users/download");
/* ウォーターマークを表示するかどうかを指定します。このパラメーターは任意です。テンプレートグループ ID を指定すると、テンプレートグループの設定に基づいてウォーターマークが表示されます。*/
//request.setShowWaterMark(true);
/* カスタムメッセージコールバック設定とアップロードアクセラレーション設定。このパラメーターは任意です。Extend はカスタム拡張設定を指定します。MessageCallback はメッセージコールバック設定を指定します。AccelerateConfig はアップロードアクセラレーション設定を指定します。使用する前にアップロードアクセラレーション機能を有効化する必要があります。*/
//request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackType\":\"http\",\"CallbackURL\":\"http://example.aliyundoc.com\"},\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");
/* 動画カテゴリ ID。このパラメーターは任意です。*/
//request.setCateId(0);
/* 動画タグ。複数のタグはカンマ (,) で区切ります。このパラメーターは任意です。*/
//request.setTags("Tag 1,Tag 2");
/* 動画の説明。このパラメーターは任意です。*/
//request.setDescription("Video description");
/* サムネイルの URL。このパラメーターは任意です。*/
//request.setCoverURL("http://cover.example.com/image_01.jpg");
/* テンプレートグループ ID。このパラメーターは任意です。*/
//request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56****");
/* ワークフロー ID。このパラメーターは任意です。*/
//request.setWorkflowId("d4430d07361f0*be1339577859b0****");
/* ストレージリージョン。このパラメーターは任意です。*/
//request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
/* デフォルトのアップロード進行状況コールバックを有効にします。*/
//request.setPrintProgress(true);
/* カスタムのアップロード進行状況コールバックを設定します。コールバックは VoDProgressListener を継承する必要があります。*/
/* この機能はデフォルトで無効になっています。この機能を有効にすると、サーバーはアップロード中にログにアップロードの詳細を返します。このメッセージを受信する必要がない場合は、この機能を無効にしてください。*/
//request.setProgressListener(new PutObjectProgressListener());
/* アプリケーション ID を設定します。*/
//request.setAppId("app-100****");
/* ApsaraVideo VOD エンドポイント。*/
//request.setApiRegionId("cn-shanghai");
/* ECS デプロイメントリージョン。*/
// request.setEcsRegionId("cn-shanghai");
// ECS デプロイメントリージョンが ApsaraVideo VOD エンドポイントリージョンと同じ場合、内部ネットワークアップロードが自動的に有効になります。
/* プロキシを設定します。このパラメーターは任意です。*/
//OSSConfig ossConfig = new OSSConfig();
/* <必須> プロキシサーバーのホスト。*/
//ossConfig.setProxyHost("<yourProxyHost>");
/* <必須> プロキシサーバーのポート。*/
//ossConfig.setProxyPort(-1);
/* OSS への接続に使用するプロトコル。有効な値:HTTP および HTTPS。デフォルト値:HTTP。*/
//ossConfig.setProtocol("HTTP");
/* ユーザーエージェント。HTTP の User-Agent ヘッダーです。デフォルト値:aliyun-sdk-java。*/
//ossConfig.setUserAgent("<yourUserAgent>");
/* プロキシサーバー認証用のユーザー名。このパラメーターは HTTPS プロトコルで必須です。*/
//ossConfig.setProxyUsername("<yourProxyUserName>");
/* プロキシサーバー認証用のパスワード。このパラメーターは HTTPS プロトコルで必須です。*/
//ossConfig.setProxyPassword("<yourProxyPassword>");
//request.setOssConfig(ossConfig);
UploadVideoImpl uploader = new UploadVideoImpl();
UploadURLStreamResponse response = uploader.uploadURLStream(request);
System.out.print("RequestId=" + response.getRequestId() + "\n"); // ApsaraVideo VOD に送信されたリクエストの ID。
if (response.isSuccess()) {
System.out.print("VideoId=" + response.getVideoId() + "\n");
} else {
/* 指定されたコールバック URL が無効な場合、動画のアップロードには影響しません。VideoId とエラーコードが返されます。その他の場合、アップロードが失敗すると VideoId は空になります。この場合、返されたエラーコードに基づいて失敗の原因を分析してください。*/
System.out.print("VideoId=" + response.getVideoId() + "\n");
System.out.print("ErrorCode=" + response.getCode() + "\n");
System.out.print("ErrorMessage=" + response.getMessage() + "\n");
}
}
/**
* ファイルストリームアップロード用の API。
*
* @param accessKeyId
* @param accessKeySecret
* @param title
* @param fileName
*/
private static void testUploadFileStream(String accessKeyId, String accessKeySecret, String title, String fileName) {
UploadFileStreamRequest request = new UploadFileStreamRequest(accessKeyId, accessKeySecret, title, fileName);
/* デフォルトのウォーターマークを使用するかどうかを指定します。このパラメーターは任意です。テンプレートグループ ID を指定すると、テンプレートグループの設定に基づいてデフォルトのウォーターマークが使用されます。*/
//request.setShowWaterMark(true);
/* カスタムメッセージコールバック設定とアップロードアクセラレーション設定。このパラメーターは任意です。Extend はカスタム拡張設定を指定します。MessageCallback はメッセージコールバック設定を指定します。AccelerateConfig はアップロードアクセラレーション設定を指定します。使用する前にアップロードアクセラレーション機能を有効化する必要があります。*/
//request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackType\":\"http\",\"CallbackURL\":\"http://example.aliyundoc.com\"},\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");
/* 動画カテゴリ ID。このパラメーターは任意です。*/
//request.setCateId(0);
/* 動画タグ。複数のタグはカンマ (,) で区切ります。このパラメーターは任意です。*/
//request.setTags("Tag 1,Tag 2");
/* 動画の説明。このパラメーターは任意です。*/
//request.setDescription("Video description");
/* サムネイルの URL。このパラメーターは任意です。*/
//request.setCoverURL("http://cover.example.com/image_01.jpg");
/* テンプレートグループ ID。このパラメーターは任意です。*/
//request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56****");
/* ワークフロー ID。このパラメーターは任意です。*/
//request.setWorkflowId("d4430d07361f0*be1339577859b0****");
/* ストレージリージョン。このパラメーターは任意です。*/
//request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
/* デフォルトのアップロード進行状況コールバックを有効にします。*/
//request.setPrintProgress(true);
/* カスタムのアップロード進行状況コールバックを設定します。コールバックは VoDProgressListener を継承する必要があります。*/
/* この機能はデフォルトで無効になっています。この機能を有効にすると、サーバーはアップロード中にログにアップロードの詳細を返します。このメッセージを受信する必要がない場合は、この機能を無効にしてください。*/
//request.setProgressListener(new PutObjectProgressListener());
/* アプリケーション ID を設定します。*/
//request.setAppId("app-100****");
/* ApsaraVideo VOD エンドポイント。*/
//request.setApiRegionId("cn-shanghai");
/* ECS デプロイメントリージョン。*/
// request.setEcsRegionId("cn-shanghai");
// ECS デプロイメントリージョンが ApsaraVideo VOD エンドポイントリージョンと同じ場合、内部ネットワークアップロードが自動的に有効になります。
/* プロキシを設定します。このパラメーターは任意です。*/
//OSSConfig ossConfig = new OSSConfig();
/* <必須> プロキシサーバーのホスト。*/
//ossConfig.setProxyHost("<yourProxyHost>");
/* <必須> プロキシサーバーのポート。*/
//ossConfig.setProxyPort(-1);
/* OSS への接続に使用するプロトコル。有効な値:HTTP および HTTPS。デフォルト値:HTTP。*/
//ossConfig.setProtocol("HTTP");
/* ユーザーエージェント。HTTP の User-Agent ヘッダーです。デフォルト値:aliyun-sdk-java。*/
//ossConfig.setUserAgent("<yourUserAgent>");
/* プロキシサーバー認証用のユーザー名。このパラメーターは HTTPS プロトコルで必須です。*/
//ossConfig.setProxyUsername("<yourProxyUserName>");
/* プロキシサーバー認証用のパスワード。このパラメーターは HTTPS プロトコルで必須です。*/
//ossConfig.setProxyPassword("<yourProxyPassword>");
//request.setOssConfig(ossConfig);
UploadVideoImpl uploader = new UploadVideoImpl();
UploadFileStreamResponse response = uploader.uploadFileStream(request);
System.out.print("RequestId=" + response.getRequestId() + "\n"); // ApsaraVideo VOD に送信されたリクエストの ID。
if (response.isSuccess()) {
System.out.print("VideoId=" + response.getVideoId() + "\n");
} else {
/* 指定されたコールバック URL が無効な場合、動画のアップロードには影響しません。VideoId とエラーコードが返されます。その他の場合、アップロードが失敗すると VideoId は空になります。この場合、返されたエラーコードに基づいて失敗の原因を分析してください。*/
System.out.print("VideoId=" + response.getVideoId() + "\n");
System.out.print("ErrorCode=" + response.getCode() + "\n");
System.out.print("ErrorMessage=" + response.getMessage() + "\n");
}
}
/**
* ストリーミングアップロード用の API。
*
* @param accessKeyId
* @param accessKeySecret
* @param title
* @param fileName
* @param inputStream
*/
private static void testUploadStream(String accessKeyId, String accessKeySecret, String title, String fileName, InputStream inputStream) {
UploadStreamRequest request = new UploadStreamRequest(accessKeyId, accessKeySecret, title, fileName, inputStream);
/* デフォルトのウォーターマークを使用するかどうかを指定します。このパラメーターは任意です。テンプレートグループ ID を指定すると、テンプレートグループの設定に基づいてデフォルトのウォーターマークが使用されます。*/
//request.setShowWaterMark(true);
/* カスタムメッセージコールバック設定とアップロードアクセラレーション設定。このパラメーターは任意です。Extend はカスタム拡張設定を指定します。MessageCallback はメッセージコールバック設定を指定します。AccelerateConfig はアップロードアクセラレーション設定を指定します。使用する前にアップロードアクセラレーション機能を有効化する必要があります。*/
//request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackType\":\"http\",\"CallbackURL\":\"http://example.aliyundoc.com\"},\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");
/* 動画カテゴリ ID。このパラメーターは任意です。*/
//request.setCateId(0);
/* 動画タグ。複数のタグはカンマ (,) で区切ります。このパラメーターは任意です。*/
//request.setTags("Tag 1,Tag 2");
/* 動画の説明。このパラメーターは任意です。*/
//request.setDescription("Video description");
/* サムネイルの URL。このパラメーターは任意です。*/
//request.setCoverURL("http://cover.example.com/image_01.jpg");
/* テンプレートグループ ID。このパラメーターは任意です。*/
//request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56****");
/* ワークフロー ID。このパラメーターは任意です。*/
//request.setWorkflowId("d4430d07361f0*be1339577859b0****");
/* ストレージリージョン。このパラメーターは任意です。*/
//request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
/* デフォルトのアップロード進行状況コールバックを有効にします。*/
// request.setPrintProgress(true);
/* カスタムのアップロード進行状況コールバックを設定します。コールバックは VoDProgressListener を継承する必要があります。*/
/* この機能はデフォルトで無効になっています。この機能を有効にすると、サーバーはアップロード中にログにアップロードの詳細を返します。このメッセージを受信する必要がない場合は、この機能を無効にしてください。*/
// request.setProgressListener(new PutObjectProgressListener());
/* アプリケーション ID を設定します。*/
//request.setAppId("app-100****");
/* ApsaraVideo VOD エンドポイント。*/
//request.setApiRegionId("cn-shanghai");
/* ECS デプロイメントリージョン。*/
// request.setEcsRegionId("cn-shanghai");
// ECS デプロイメントリージョンが ApsaraVideo VOD エンドポイントリージョンと同じ場合、内部ネットワークアップロードが自動的に有効になります。
/* プロキシを設定します。このパラメーターは任意です。*/
//OSSConfig ossConfig = new OSSConfig();
/* <必須> プロキシサーバーのホスト。*/
//ossConfig.setProxyHost("<yourProxyHost>");
/* <必須> プロキシサーバーのポート。*/
//ossConfig.setProxyPort(-1);
/* OSS への接続に使用するプロトコル。有効な値:HTTP および HTTPS。デフォルト値:HTTP。*/
//ossConfig.setProtocol("HTTP");
/* ユーザーエージェント。HTTP の User-Agent ヘッダーです。デフォルト値:aliyun-sdk-java。*/
//ossConfig.setUserAgent("<yourUserAgent>");
/* プロキシサーバー認証用のユーザー名。このパラメーターは HTTPS プロトコルで必須です。*/
//ossConfig.setProxyUsername("<yourProxyUserName>");
/* プロキシサーバー認証用のパスワード。このパラメーターは HTTPS プロトコルで必須です。*/
//ossConfig.setProxyPassword("<yourProxyPassword>");
//request.setOssConfig(ossConfig);
UploadVideoImpl uploader = new UploadVideoImpl();
UploadStreamResponse response = uploader.uploadStream(request);
System.out.print("RequestId=" + response.getRequestId() + "\n"); // ApsaraVideo VOD に送信されたリクエストの ID。
if (response.isSuccess()) {
System.out.print("VideoId=" + response.getVideoId() + "\n");
} else { // 指定されたコールバック URL が無効な場合、動画のアップロードには影響しません。VideoId とエラーコードが返されます。その他の場合、アップロードが失敗すると VideoId は空になります。この場合、返されたエラーコードに基づいて失敗の原因を分析してください。
System.out.print("VideoId=" + response.getVideoId() + "\n");
System.out.print("ErrorCode=" + response.getCode() + "\n");
System.out.print("ErrorMessage=" + response.getMessage() + "\n");
}
}
}M3U8 ファイル
サンプルコードを展開して表示
public class UploadVideoDemo {
// 必須。AccessKey ペアを指定します。
// Alibaba Cloud アカウントの AccessKey ペアは、すべての API へのアクセス権限を持っています。API 呼び出しや日常の O&M には、RAM ユーザーの AccessKey ペアを使用することを推奨します。
// AccessKey ID と AccessKey Secret をプロジェクトコードにハードコーディングしないことを強く推奨します。ハードコーディングすると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
// この例では、環境変数から AccessKey ペアを読み取って API アクセスを認証する方法を示します。サンプルコードを実行する前に、ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を設定してください。
private static final String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
private static final String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
public static void main(String[] args) {
// M3U8 ファイルをアップロードします。
// 1. ローカルの M3U8 音声または動画ファイルをアップロードします。
testUploadLocalM3u8(accessKeyId, accessKeySecret);
// 2. Web ベースの M3U8 音声または動画ファイルをアップロードします。
testUploadWebM3u8(accessKeyId, accessKeySecret);
}
/**
* ローカルの M3U8 動画または音声ファイルを ApsaraVideo VOD にアップロードします。デフォルトでは、M3U8 ファイルとそのシャードは同じディレクトリにあります。sliceFilenames が空の場合、シャードアドレスは同じディレクトリから解析されます。
*
* @param request ローカル M3U8 ファイルをアップロードするリクエスト。
* m3u8Filename:ローカル M3U8 マニフェストの絶対パス。M3U8 ファイル内のシャード情報は相対パスである必要があります。URL や絶対ローカルパスを含めることはできません。
* sliceFilenames:TS シャードの絶対パスのリスト。このパラメーターを指定すると、このリストが使用されます。このパラメーターを指定しない場合、m3u8Filename で指定された m3u8 ファイルが自動的に解析されます。
*/
private static void testUploadLocalM3u8(String accessKeyId, String accessKeySecret) {
String title = "test_upload_local_m3u8";
String m3u8Filename = "/Users/test/0e9ecfc6da934d1887ed7bdfc925****/cc38da35c7b24de0abe58619cdd7****-6479a12446b994719838e0307f****-ld.m3u8";
UploadLocalM3u8Request request = new UploadLocalM3u8Request(accessKeyId, accessKeySecret, title, m3u8Filename);
String[] sliceFilenames = new String[]{
"/Users/test/0e9ecfc6da934d1887ed7bdfc925****/slices/cc38da35c7b24de0abe58619cdd7****-c45797a1ad6e75fbb9d1a8493703****-ld-00001.ts",
"/Users/test/0e9ecfc6da934d1887ed7bdfc925****/slices/cc38da35c7b24de0abe58619cdd7****-c45797a1ad6e75fbb9d1a8493703****-ld-00002.ts",
"/Users/test/0e9ecfc6da934d1887ed7bdfc925****/slices/cc38da35c7b24de0abe58619cdd7****-c45797a1ad6e75fbb9d1a8493703****-ld-00003.ts",
"/Users/test/0e9ecfc6da934d1887ed7bdfc925****/slices/cc38da35c7b24de0abe58619cdd7****-c45797a1ad6e75fbb9d1a8493703****-ld-00004.ts",
"/Users/test/0e9ecfc6da934d1887ed7bdfc925****/slices/cc38da35c7b24de0abe58619cdd7****-c45797a1ad6e75fbb9d1a8493703****-ld-00005.ts"
};
// TS シャードファイルのリスト。このパラメーターは任意です。このパラメーターを指定しない場合、シャードアドレスは M3U8 ファイルから直接解析されます。
request.setSliceFilenames(sliceFilenames);
/* マルチパートアップロードの各パートのサイズ。デフォルト値:2 MB。*/
request.setPartSize(2 * 1024 * 1024L);
/* マルチパートアップロードの同時スレッド数。デフォルト値:1。注意:この設定はサーバーの CPU リソースを消費します。サーバーのパフォーマンスに基づいてスレッド数を指定してください。*/
request.setTaskNum(1);
/* ウォーターマークを表示するかどうかを指定します。このパラメーターは任意です。テンプレートグループ ID を指定すると、テンプレートグループの設定に基づいてウォーターマークが表示されます。*/
//request.setShowWaterMark(true);
/* カスタムメッセージコールバック設定とアップロードアクセラレーション設定。このパラメーターは任意です。Extend はカスタム拡張設定を指定します。MessageCallback はメッセージコールバック設定を指定します。AccelerateConfig はアップロードアクセラレーション設定を指定します。使用する前にアップロードアクセラレーション機能を有効化する必要があります。*/
//request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackType\":\"http\",\"CallbackURL\":\"http://example.aliyundoc.com\"},\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");
/* 動画カテゴリ ID。このパラメーターは任意です。*/
//request.setCateId(-1L);
/* 動画タグ。複数のタグはカンマ (,) で区切ります。このパラメーターは任意です。*/
//request.setTags("Tag 1,Tag 2");
/* 動画の説明。このパラメーターは任意です。*/
//request.setDescription("Video description");
/* サムネイルの URL。このパラメーターは任意です。*/
//request.setCoverURL("http://cover.sample.com/sample.jpg");
/* テンプレートグループ ID。このパラメーターは任意です。*/
//request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56****");
/* ワークフロー ID。このパラメーターは任意です。*/
//request.setWorkflowId("d4430d07361f0*be1339577859b0****");
/* ストレージリージョン。このパラメーターは任意です。*/
//request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
/* アプリケーション ID を設定します。*/
// request.setAppId("app-1000000");
/* ApsaraVideo VOD エンドポイント。*/
// request.setApiRegionId("cn-shanghai");
/* ECS デプロイメントリージョン。*/
// request.setEcsRegionId("cn-shanghai");
/* プロキシを設定します。このパラメーターは任意です。*/
//OSSConfig ossConfig = new OSSConfig();
/* <必須> プロキシサーバーのホスト。*/
//ossConfig.setProxyHost("<yourProxyHost>");
/* <必須> プロキシサーバーのポート。*/
//ossConfig.setProxyPort(-1);
/* OSS への接続に使用するプロトコル。有効な値:HTTP および HTTPS。デフォルト値:HTTP。*/
//ossConfig.setProtocol("HTTP");
/* ユーザーエージェント。HTTP の User-Agent ヘッダーです。デフォルト値:aliyun-sdk-java。*/
//ossConfig.setUserAgent("<yourUserAgent>");
/* プロキシサーバー認証用のユーザー名。このパラメーターは HTTPS プロトコルで必須です。*/
//ossConfig.setProxyUsername("<yourProxyUserName>");
/* プロキシサーバー認証用のパスワード。このパラメーターは HTTPS プロトコルで必須です。*/
//ossConfig.setProxyPassword("<yourProxyPassword>");
//request.setOssConfig(ossConfig);
UploadM3u8FileImpl uploadM3u8File = new UploadM3u8FileImpl();
UploadLocalM3u8Response uploadLocalM3u8Response = uploadM3u8File.uploadLocalM3u8(request);
System.out.println("code = " + uploadLocalM3u8Response.getCode());
System.out.println("message = " + uploadLocalM3u8Response.getMessage());
System.out.println("videoId = " + uploadLocalM3u8Response.getVideoId());
System.out.println("requestId = " + uploadLocalM3u8Response.getRequestId());
}
/**
* Web ベースの M3U8 動画または音声ファイルを ApsaraVideo VOD にアップロードします。ファイルはまず一時的なローカルディレクトリにダウンロードされ、その後 ApsaraVideo VOD ストレージにアップロードされるため、十分なローカルディスク領域が必要です。
*
* @param request Web ベースの M3U8 ファイルをアップロードするリクエスト。
* m3u8FileURL:Web ベースの M3U8 マニフェストの URL。M3U8 ファイル内のシャード情報は相対パスである必要があります。URL や絶対ローカルパスを含めることはできません。
* sliceFileURLs:TS シャードの URL のリスト。TS シャード URL のリストは自分で作成する必要があります。
*/
private static void testUploadWebM3u8(String accessKeyId, String accessKeySecret) {
String title = "test_upload_web_m3u8";
String m3u8FileURL = "http://test.aliyun.com/f0d644abc547129e957b386f77****/a0e1e2817ab9425aa558fe67a90e****-538087dcf2c201c31ce4324bf76af69****.m3u8";
UploadWebM3u8Request request = new UploadWebM3u8Request(accessKeyId, accessKeySecret, title, m3u8FileURL);
String[] sliceFileURLs = new String[]{
"http://test.aliyun.com/f0d644abc547129e957b386f77****/a0e1e2817ab9425aa558fe67a90e****-822598b9c170a8c6dad985e20cd9c27d-ld-0****.ts",
"http://test.aliyun.com/f0d644abc547129e957b386f77****/a0e1e2817ab9425aa558fe67a90e****-822598b9c170a8c6dad985e20cd9c27d-ld-0****.ts",
"http://test.aliyun.com/f0d644abc547129e957b386f77****/a0e1e2817ab9425aa558fe67a90e****-822598b9c170a8c6dad985e20cd9c27d-ld-0****.ts",
"http://test.aliyun.com/f0d644abc547129e957b386f77****/a0e1e2817ab9425aa558fe67a90e****-822598b9c170a8c6dad985e20cd9c27d-ld-0****.ts",
"http://test.aliyun.com/f0d644abc547129e957b386f77****/a0e1e2817ab9425aa558fe67a90e****-822598b9c170a8c6dad985e20cd9c27d-ld-0****.ts"
};
// TS シャードのアドレス。このパラメーターは任意です。このパラメーターを指定しない場合、シャードアドレスは m3u8FileURL から直接解析されます。
request.setSliceFileURLs(sliceFileURLs);
/* ダウンロードしたファイルの一時保存ディレクトリ。このディレクトリはカスタマイズできます。ディレクトリを指定しない場合、ファイルはプログラムが実行されるディレクトリに保存されます。*/
// request.setGlobalLocalFilePath("/User/download/");
/* マルチパートアップロードの各パートのサイズ。デフォルト値:2 MB。*/
request.setPartSize(2 * 1024 * 1024L);
/* マルチパートアップロードの同時スレッド数。デフォルト値:1。注意:この設定はサーバーの CPU リソースを消費します。サーバーのパフォーマンスに基づいてスレッド数を指定してください。*/
request.setTaskNum(1);
/* ウォーターマークを表示するかどうかを指定します。このパラメーターは任意です。テンプレートグループ ID を指定すると、テンプレートグループの設定に基づいてウォーターマークが表示されます。*/
//request.setShowWaterMark(true);
/* カスタムメッセージコールバック設定とアップロードアクセラレーション設定。このパラメーターは任意です。Extend はカスタム拡張設定を指定します。MessageCallback はメッセージコールバック設定を指定します。AccelerateConfig はアップロードアクセラレーション設定を指定します。使用する前にアップロードアクセラレーション機能を有効化する必要があります。*/
//request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackType\":\"http\",\"CallbackURL\":\"http://example.aliyundoc.com\"},\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");
/* 動画カテゴリ ID。このパラメーターは任意です。*/
//request.setCateId(-1L);
/* 動画タグ。複数のタグはカンマ (,) で区切ります。このパラメーターは任意です。*/
//request.setTags("Tag 1,Tag 2");
/* 動画の説明。このパラメーターは任意です。*/
//request.setDescription("Video description");
/* サムネイルの URL。このパラメーターは任意です。*/
//request.setCoverURL("http://cover.example.com/sample.jpg");
/* テンプレートグループ ID。このパラメーターは任意です。*/
//request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56****");
/* ワークフロー ID。このパラメーターは任意です。*/
//request.setWorkflowId("d4430d07361f0*be1339577859b0****");
/* ストレージリージョン。このパラメーターは任意です。*/
//request.setStorageLocation("in-2017032321****-5sejdln9o.oss-cn-shanghai.aliyuncs.com");
/* アプリケーション ID を設定します。*/
//request.setAppId("app-100****");
/* ApsaraVideo VOD エンドポイント。*/
//request.setApiRegionId("cn-shanghai");
/* ECS デプロイメントリージョン。*/
// request.setEcsRegionId("cn-shanghai");
/* プロキシを設定します。このパラメーターは任意です。*/
//OSSConfig ossConfig = new OSSConfig();
/* <必須> プロキシサーバーのホスト。*/
//ossConfig.setProxyHost("<yourProxyHost>");
/* <必須> プロキシサーバーのポート。*/
//ossConfig.setProxyPort(-1);
/* OSS への接続に使用するプロトコル。有効な値:HTTP および HTTPS。デフォルト値:HTTP。*/
//ossConfig.setProtocol("HTTP");
/* ユーザーエージェント。HTTP の User-Agent ヘッダーです。デフォルト値:aliyun-sdk-java。*/
//ossConfig.setUserAgent("<yourUserAgent>");
/* プロキシサーバー認証用のユーザー名。このパラメーターは HTTPS プロトコルで必須です。*/
//ossConfig.setProxyUsername("<yourProxyUserName>");
/* プロキシサーバー認証用のパスワード。このパラメーターは HTTPS プロトコルで必須です。*/
//ossConfig.setProxyPassword("<yourProxyPassword>");
//request.setOssConfig(ossConfig);
UploadM3u8FileImpl uploadM3u8File = new UploadM3u8FileImpl();
UploadWebM3u8Response uploadWebM3u8Response = uploadM3u8File.uploadWebM3u8(request);
System.out.println("code = " + uploadWebM3u8Response.getCode());
System.out.println("message = " + uploadWebM3u8Response.getMessage());
System.out.println("videoId = " + uploadWebM3u8Response.getVideoId());
System.out.println("requestId = " + uploadWebM3u8Response.getRequestId());
}
}アップロードアクセラレーション
ギガバイトまたはテラバイト単位の大きなファイルをアップロードする場合や、中国本土からシンガポールリージョンのストレージの場所へなど、リージョンをまたいで動画をアップロードする場合は、アップロードアクセラレーション機能を有効にできます。詳細については、「アップロードアクセラレーションの有効化」をご参照ください。アップロードアクセラレーションを有効にした後、対応する キーと値のペア AccelerateConfig をアップロード設定の UserData オブジェクトに追加する必要があります。オブジェクトが存在しない場合は、作成する必要があります。次のコードは例です。
request.setUserData("{\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");パラメーターの説明
名前 | タイプ | 説明 |
Type | string | アップロードアクセラレーションを有効にするタイプ。oss のみがサポートされています。 |
Domain | string | バケットの高速化ドメイン名。デフォルトのプロトコルは HTTPS です。 説明 アップロードアクセラレーションを有効にした後に割り当てられる高速化エンドポイント (例:vod-*******.oss-accelerate.aliyuncs.com) を使用してください。 |
シナリオ 2:画像のアップロード
サンプルコードを展開して表示
public class UploadImageDemo {
// 必須。AccessKey ペアを指定します。
// Alibaba Cloud アカウントの AccessKey ペアは、すべての API へのアクセス権限を持っています。API 呼び出しや日常の O&M には、RAM ユーザーの AccessKey ペアを使用することを推奨します。
// AccessKey ID と AccessKey Secret をプロジェクトコードにハードコーディングしないことを強く推奨します。ハードコーディングすると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
// この例では、環境変数から AccessKey ペアを読み取って API アクセスを認証する方法を示します。サンプルコードを実行する前に、ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を設定してください。
private static final String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
private static final String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
public static void main(String[] args) {
// 画像をアップロードします。
// 1. ローカルの画像ファイルをアップロードします。
testUploadImageLocalFile(accessKeyId, accessKeySecret);
// 2. ストリーミングアップロードを使用して、ファイルストリームまたはネットワークストリームを画像としてアップロードします。
testUploadImageStream(accessKeyId, accessKeySecret);
}
/**
* ローカル画像ファイルアップロード用の API。
*
* @param accessKeyId
* @param accessKeySecret
*/
private static void testUploadImageLocalFile(String accessKeyId, String accessKeySecret) {
/* 画像タイプ。このパラメーターは必須です。有効な値:default、cover、watermark。*/
String imageType = "cover";
UploadImageRequest request = new UploadImageRequest(accessKeyId, accessKeySecret, imageType);
request.setImageType("cover");
/* 画像のファイル名拡張子。このパラメーターは任意です。有効な値:png、jpg、jpeg。*/
//request.setImageExt("png");
/* 画像のタイトル。このパラメーターは任意です。タイトルは最大 128 バイトの長さで、UTF-8 でエンコードされている必要があります。*/
//request.setTitle("Image Title");
/* 画像のタグ。このパラメーターは任意です。単一のタグは最大 32 バイトの長さです。最大 16 個のタグを追加できます。複数のタグはカンマ (,) で区切ります。タグは UTF-8 でエンコードされている必要があります。*/
//request.setTags("Tag 1,Tag 2");
/* ストレージリージョン。このパラメーターは任意です。*/
//request.setStorageLocation("out-4f3952f78c0211e8b30200****.oss-cn-shanghai.aliyuncs.com");
/* ストリーミングアップロードの場合、InputStream は必須で、fileName は任意です。fileName はソースファイル名を指定します (例:FileName.png)。*/
String fileName = "/Users/demo/png/test.png";
request.setFileName(fileName);
/* デフォルトのアップロード進行状況コールバックを有効にします。*/
//request.setPrintProgress(false);
/* カスタムのアップロード進行状況コールバックを設定します。コールバックは VoDProgressListener を継承する必要があります。*/
/* この機能はデフォルトで無効になっています。この機能を有効にすると、サーバーはアップロード中にログにアップロードの詳細を返します。このメッセージを受信する必要がない場合は、この機能を無効にしてください。*/
// request.setProgressListener(new PutObjectProgressListener());
/* アプリケーション ID を設定します。*/
//request.setAppId("app-100****");
/* ApsaraVideo VOD エンドポイント。*/
//request.setApiRegionId("cn-shanghai");
/* プロキシを設定します。このパラメーターは任意です。*/
//OSSConfig ossConfig = new OSSConfig();
/* <必須> プロキシサーバーのホスト。*/
//ossConfig.setProxyHost("<yourProxyHost>");
/* <必須> プロキシサーバーのポート。*/
//ossConfig.setProxyPort(-1);
/* OSS への接続に使用するプロトコル。有効な値:HTTP および HTTPS。デフォルト値:HTTP。*/
//ossConfig.setProtocol("HTTP");
/* ユーザーエージェント。HTTP の User-Agent ヘッダーです。デフォルト値:aliyun-sdk-java。*/
//ossConfig.setUserAgent("<yourUserAgent>");
/* プロキシサーバー認証用のユーザー名。このパラメーターは HTTPS プロトコルで必須です。*/
//ossConfig.setProxyUsername("<yourProxyUserName>");
/* プロキシサーバー認証用のパスワード。このパラメーターは HTTPS プロトコルで必須です。*/
//ossConfig.setProxyPassword("<yourProxyPassword>");
//request.setOssConfig(ossConfig);
UploadImageImpl uploadImage = new UploadImageImpl();
UploadImageResponse response = uploadImage.upload(request);
System.out.print("RequestId=" + response.getRequestId() + "\n");
if (response.isSuccess()) {
System.out.print("ImageId=" + response.getImageId() + "\n");
System.out.print("ImageURL=" + response.getImageURL() + "\n");
} else {
System.out.print("ErrorCode=" + response.getCode() + "\n");
System.out.print("ErrorMessage=" + response.getMessage() + "\n");
}
}
/**
* 画像のストリーミングアップロード用の API。このメソッドはファイルストリームとネットワークストリームをサポートします。
*
* @param accessKeyId
* @param accessKeySecret
*/
private static void testUploadImageStream(String accessKeyId, String accessKeySecret) {
/* 画像タイプ。このパラメーターは必須です。有効な値:default、cover、watermark。*/
String imageType = "cover";
UploadImageRequest request = new UploadImageRequest(accessKeyId, accessKeySecret, imageType);
/* 画像のファイル名拡張子。このパラメーターは任意です。有効な値:png、jpg、jpeg。*/
//request.setImageExt("png");
/* 画像のタイトル。このパラメーターは任意です。タイトルは最大 128 バイトの長さで、UTF-8 でエンコードされている必要があります。*/
//request.setTitle("Image Title");
/* 画像のタグ。このパラメーターは任意です。単一のタグは最大 32 バイトの長さです。最大 16 個のタグを追加できます。複数のタグはカンマ (,) で区切ります。タグは UTF-8 でエンコードされている必要があります。*/
//request.setTags("Tag 1,Tag 2");
/* ストレージリージョン。このパラメーターは任意です。*/
//request.setStorageLocation("out-4f3952f78c0211e8b30200****.oss-cn-shanghai.aliyuncs.com");
/* ストリーミングアップロードの場合、InputStream は必須で、fileName は任意です。fileName はソースファイル名を指定します (例:FileName.png)。*/
//request.setFileName("TestFileName.png");
/* デフォルトのアップロード進行状況コールバックを有効にします。*/
// request.setPrintProgress(true);
/* カスタムのアップロード進行状況コールバックを設定します。コールバックは VoDProgressListener を継承する必要があります。*/
/* この機能はデフォルトで無効になっています。この機能を有効にすると、サーバーはアップロード中にログにアップロードの詳細を返します。このメッセージを受信する必要がない場合は、この機能を無効にしてください。*/
// request.setProgressListener(new PutObjectProgressListener());
/* アプリケーション ID を設定します。*/
//request.setAppId("app-1000000");
/* プロキシを設定します。このパラメーターは任意です。*/
//OSSConfig ossConfig = new OSSConfig();
/* <必須> プロキシサーバーのホスト。*/
//ossConfig.setProxyHost("<yourProxyHost>");
/* <必須> プロキシサーバーのポート。*/
//ossConfig.setProxyPort(-1);
/* OSS への接続に使用するプロトコル。有効な値:HTTP および HTTPS。デフォルト値:HTTP。*/
//ossConfig.setProtocol("HTTP");
/* ユーザーエージェント。HTTP の User-Agent ヘッダーです。デフォルト値:aliyun-sdk-java。*/
//ossConfig.setUserAgent("<yourUserAgent>");
/* プロキシサーバー認証用のユーザー名。このパラメーターは HTTPS プロトコルで必須です。*/
//ossConfig.setProxyUsername("<yourProxyUserName>");
/* プロキシサーバー認証用のパスワード。このパラメーターは HTTPS プロトコルで必須です。*/
//ossConfig.setProxyPassword("<yourProxyPassword>");
//request.setOssConfig(ossConfig);
// 1. ファイルストリームをアップロードします。
// InputStream fileStream = getFileStream(request.getFileName());
// if (fileStream != null) {
// request.setInputStream(fileStream);
// }
// 2. ネットワークストリームをアップロードします。
String url = "http://test.aliyun.com/image/default/test.png";
InputStream urlStream = getUrlStream(url);
if (urlStream != null) {
request.setInputStream(urlStream);
}
// 画像のアップロードを開始します。
UploadImageImpl uploadImage = new UploadImageImpl();
UploadImageResponse response = uploadImage.upload(request);
System.out.print("RequestId=" + response.getRequestId() + "\n");
if (response.isSuccess()) {
System.out.print("ImageId=" + response.getImageId() + "\n");
System.out.print("ImageURL=" + response.getImageURL() + "\n");
} else {
System.out.print("ErrorCode=" + response.getCode() + "\n");
System.out.print("ErrorMessage=" + response.getMessage() + "\n");
}
}
private static InputStream getFileStream(String fileName) {
try {
return new FileInputStream(fileName);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return null;
}
private static InputStream getUrlStream(String url) {
try {
return new URL(url).openStream();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
} シナリオ 3:補助メディアアセットのアップロード
サンプルコードを展開して表示
public class UploadAttachedMediaDemo {
// 必須。AccessKey ペアを指定します。
// Alibaba Cloud アカウントの AccessKey ペアは、すべての API へのアクセス権限を持っています。API 呼び出しや日常の O&M には、RAM ユーザーの AccessKey ペアを使用することを推奨します。
// AccessKey ID と AccessKey Secret をプロジェクトコードにハードコーディングしないことを強く推奨します。ハードコーディングすると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
// この例では、環境変数から AccessKey ペアを読み取って API アクセスを認証する方法を示します。サンプルコードを実行する前に、ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を設定してください。
private static final String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
private static final String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
public static void main(String[] args) {
// 補助メディアアセットをアップロードします。
// ローカルの補助メディアアセットファイルをアップロードします。
testUploadAttachedMediaLocalFile(accessKeyId, accessKeySecret);
// ストリーミングアップロードを使用して補助メディアアセットをアップロードします。このメソッドはファイルストリームとネットワークストリームをサポートします。
testUploadAttachedMediaStream(accessKeyId, accessKeySecret);
}
/**
* ローカル補助メディアアセットファイルアップロード用の API。
*
* @param accessKeyId
* @param accessKeySecret
*/
private static void testUploadAttachedMediaLocalFile(String accessKeyId, String accessKeySecret) {
/* ビジネスタイプ。*/
String businessType = "watermark";
/* ファイル名拡張子。*/
String mediaExt = "png";
String filename = "/Users/demo/png/test.png";
UploadAttachedMediaRequest request = new UploadAttachedMediaRequest(accessKeyId, accessKeySecret, businessType, mediaExt);
request.setFileName(filename);
/* タイトル。*/
request.setTitle("test_attached_media");
/* カテゴリ ID。*/
request.setCateId(-1L);
/* タグ。複数のタグはカンマ (,) で区切ります。このパラメーターは任意です。*/
request.setTags("tag1,tag2");
/* 説明。このパラメーターは任意です。*/
request.setDescription("test_desc");
/* ストレージリージョン。このパラメーターは任意です。*/
request.setStorageLocation("out-20170323225118266-5l3hs5****.oss-cn-shanghai.aliyuncs.com");
/* ApsaraVideo VOD エンドポイント。*/
request.setApiRegionId("cn-shanghai");
/* アプリケーション ID を設定します。*/
//request.setAppId("app-1000000");
/* プロキシを設定します。このパラメーターは任意です。*/
//OSSConfig ossConfig = new OSSConfig();
/* <必須> プロキシサーバーのホスト。*/
//ossConfig.setProxyHost("<yourProxyHost>");
/* <必須> プロキシサーバーのポート。*/
//ossConfig.setProxyPort(-1);
/* OSS への接続に使用するプロトコル。有効な値:HTTP および HTTPS。デフォルト値:HTTP。*/
//ossConfig.setProtocol("HTTP");
/* ユーザーエージェント。HTTP の User-Agent ヘッダーです。デフォルト値:aliyun-sdk-java。*/
//ossConfig.setUserAgent("<yourUserAgent>");
/* プロキシサーバー認証用のユーザー名。このパラメーターは HTTPS プロトコルで必須です。*/
//ossConfig.setProxyUsername("<yourProxyUserName>");
/* プロキシサーバー認証用のパスワード。このパラメーターは HTTPS プロトコルで必須です。*/
//ossConfig.setProxyPassword("<yourProxyPassword>");
//request.setOssConfig(ossConfig);
UploadAttachedMediaImpl uploader = new UploadAttachedMediaImpl();
UploadAttachedMediaResponse response = uploader.upload(request);
System.out.print("RequestId=" + response.getRequestId() + "\n");
if (response.isSuccess()) {
System.out.print("MediaId=" + response.getMediaId() + "\n");
System.out.print("MediaURL=" + response.getMediaURL() + "\n");
System.out.print("FileURL=" + response.getFileURL() + "\n");
} else {
System.out.print("ErrorCode=" + response.getCode() + "\n");
System.out.print("ErrorMessage=" + response.getMessage() + "\n");
}
}
/**
* 補助メディアアセットのストリーミングアップロード用の API。このメソッドはファイルストリームとネットワークストリームをサポートします。
*
* @param accessKeyId
* @param accessKeySecret
*/
private static void testUploadAttachedMediaStream(String accessKeyId, String accessKeySecret) {
/* ビジネスタイプ。*/
String businessType = "watermark";
/* ファイル名拡張子。*/
String mediaExt = "png";
String filename = "http://test.aliyun.com/test.png";
UploadAttachedMediaRequest request;
// 1. ファイルストリームをアップロードします。
InputStream fileStream = getFileStream(filename);
request = new UploadAttachedMediaRequest(accessKeyId, accessKeySecret, businessType, mediaExt);
request.setInputStream(fileStream);
// 2. ネットワークストリームをアップロードします。
// String url = "http://test.aliyun.com/image//test.png";
// InputStream urlStream = getUrlStream(url);
// request = new UploadAttachedMediaRequest(accessKeyId, accessKeySecret, businessType, mediaExt);
// request.setInputStream(urlStream);
/* タイトル。*/
request.setTitle("test_attached_media");
/* カテゴリ ID。*/
request.setCateId(-1L);
/* タグ。複数のタグはカンマ (,) で区切ります。このパラメーターは任意です。*/
request.setTags("tag1,tag2");
/* 説明。このパラメーターは任意です。*/
request.setDescription("test_desc");
/* ストレージリージョン。このパラメーターは任意です。*/
request.setStorageLocation("out-20170323225118266-5l3****wa.oss-cn-shanghai.aliyuncs.com");
/* ApsaraVideo VOD エンドポイント。*/
request.setApiRegionId("cn-shanghai");
/* アプリケーション ID を設定します。*/
// request.setAppId("app-1000000");
/* プロキシを設定します。このパラメーターは任意です。*/
//OSSConfig ossConfig = new OSSConfig();
/* <必須> プロキシサーバーのホスト。*/
//ossConfig.setProxyHost("<yourProxyHost>");
/* <必須> プロキシサーバーのポート。*/
//ossConfig.setProxyPort(-1);
/* OSS への接続に使用するプロトコル。有効な値:HTTP および HTTPS。デフォルト値:HTTP。*/
//ossConfig.setProtocol("HTTP");
/* ユーザーエージェント。HTTP の User-Agent ヘッダーです。デフォルト値:aliyun-sdk-java。*/
//ossConfig.setUserAgent("<yourUserAgent>");
/* プロキシサーバー認証用のユーザー名。このパラメーターは HTTPS プロトコルで必須です。*/
//ossConfig.setProxyUsername("<yourProxyUserName>");
/* プロキシサーバー認証用のパスワード。このパラメーターは HTTPS プロトコルで必須です。*/
//ossConfig.setProxyPassword("<yourProxyPassword>");
//request.setOssConfig(ossConfig);
// アップロードを開始します。
UploadAttachedMediaImpl uploader = new UploadAttachedMediaImpl();
UploadAttachedMediaResponse response = uploader.upload(request);
System.out.print("RequestId=" + response.getRequestId() + "\n");
if (response.isSuccess()) {
System.out.print("MediaId=" + response.getMediaId() + "\n");
System.out.print("MediaURL=" + response.getMediaURL() + "\n");
System.out.print("FileURL=" + response.getFileURL() + "\n");
} else {
System.out.print("ErrorCode=" + response.getCode() + "\n");
System.out.print("ErrorMessage=" + response.getMessage() + "\n");
}
}
private static InputStream getFileStream(String fileName) {
try {
return new FileInputStream(fileName);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return null;
}
private static InputStream getUrlStream(String url) {
try {
return new URL(url).openStream();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}高度な機能
アップロードプログレスバー
サンプルディレクトリの
PutObjectProgressListener.javaファイルには、アップロードプログレスコールバック関数のサンプルコードが提供されています。このクラスは VoDProgressListener クラスを継承する必要があります。ProgressEvent は、ファイルが OSS にアップロードされるときに生成されるプログレスコールバック通知です。各イベント通知に対してビジネスロジックをカスタマイズできます。
次のコードは例です。
サンプルコードを展開して表示
/** * アップロードプログレスコールバックメソッドのクラス。 * このイベントコールバックは、アップロードプログレスコールバックを有効にした後にのみ有効になります。 * OSS へのマルチパートアップロードが成功したか失敗したかに関わらず、対応するコールバックイベントがトリガーされます。ビジネスロジックに基づいてイベントコールバックを処理できます。 * 音声または動画情報が作成された後、このアップロードプログレスコールバックの videoId は、このアップロードで生成された動画の ID です。動画 ID に基づいて音声および動画ファイルを管理できます。 * 画像情報が作成された後、このアップロードプログレスコールバックの ImageId は、このアップロードで生成された画像の ID です。画像 ID に基づいて画像を管理できます。 */ public class PutObjectProgressListener implements VoDProgressListener { /** * OSS に正常にアップロードされたバイト数。 */ private long bytesWritten = 0; /** * ソースファイルの合計バイト数。 */ private long totalBytes = -1; /** * このアップロードの成功フラグ。 */ private boolean succeed = false; /** * 動画 ID。 */ private String videoId; /** * 画像 ID。 */ private String imageId; public void progressChanged(ProgressEvent progressEvent) { long bytes = progressEvent.getBytes(); ProgressEventType eventType = progressEvent.getEventType(); switch (eventType) { // アップロード開始イベント。 case TRANSFER_STARTED_EVENT: if (videoId != null) { System.out.println("Start to upload videoId "+videoId+"......"); } if (imageId != null) { System.out.println("Start to upload imageId "+imageId+"......"); } break; // アップロードされるファイルの合計サイズを通知するイベント。このイベントはローカルファイルのアップロードでのみサポートされます。 case REQUEST_CONTENT_LENGTH_EVENT: this.totalBytes = bytes; System.out.println(this.totalBytes + "bytes in total will be uploaded to OSS."); break; // アップロードされたファイルのサイズを通知するイベント。 case REQUEST_BYTE_TRANSFER_EVENT: this.bytesWritten += bytes; if (this.totalBytes != -1) { int percent = (int) (this.bytesWritten * 100.0 / this.totalBytes); System.out.println(bytes+" bytes have been written at this time, upload progress: "+ percent +"%(" + this.bytesWritten + "/" + this.totalBytes + ")"); } else { System.out.println(bytes + " bytes have been written at this time, upload sub total : " + "(" + this.bytesWritten + ")"); } break; // ファイルが正常にアップロードされたことを通知するイベント。 case TRANSFER_COMPLETED_EVENT: this.succeed = true; if (videoId != null) { System.out.println("Succeed to upload videoId " + videoId + " , " + this.bytesWritten + " bytes have been transferred in total."); } if (imageId != null) { System.out.println("Succeed to upload imageId " + imageId + " , " + this.bytesWritten + " bytes have been transferred in total."); } break; // ファイルのアップロードが失敗したことを通知するイベント。 case TRANSFER_FAILED_EVENT: if (videoId != null) { System.out.println("Failed to upload videoId " + videoId + " , " + this.bytesWritten + " bytes have been transferred."); } if (imageId != null) { System.out.println("Failed to upload imageId " + imageId + " , " + this.bytesWritten + " bytes have been transferred."); } break; default: break; } } public boolean isSucceed() { return succeed; } public void onVidReady(String videoId) { setVideoId(videoId); } public void onImageIdReady(String imageId) { setImageId(imageId); } public String getVideoId() { return videoId; } public void setVideoId(String videoId) { this.videoId = videoId; } public String getImageId() { return imageId; } public void setImageId(String imageId) { this.imageId = imageId; } }一時トークンのリフレッシュ
サンプルディレクトリの
RefreshSTSTokenImpl.javaファイルには、一時トークンをリフレッシュするためのサンプルコードが提供されています。以下は例です。
サンプルコードを展開して表示
/** * @author vod * STS 情報を生成するための実装クラス。 * @date 2019/6/5 */ public class RefreshSTSTokenImpl implements VoDRefreshSTSTokenListener { public STSTokenDTO onRefreshSTSToken() { STSTokenDTO stsTokenDTO = new STSTokenDTO(); stsTokenDTO.setAccessKeyId("<your sts AccessKeyId>"); stsTokenDTO.setAccessKeySecret("<your sts AccessKeySecret>"); stsTokenDTO.setSecurityToken("<your sts SecurityToken>"); return stsTokenDTO; } }
よくある質問
関連する依存関係が見つからないのはなぜですか?この問題は、開発環境の違いによって発生することがあり、通常は IntelliJ IDEA のコンパイル問題が原因です。必要なリソースパッケージをインポートしている場合は、次の解決策を試してください。
Maven プロジェクトで、右側の [Maven] をクリックし、[m] アイコンをクリックしてから、
mvn idea:moduleを入力してリソースを再読み込みします。
トップメニューバーから、[Build] > [Rebuild Project] を選択します。

aliyun-java-vod-upload-1.4.15.jar パッケージをプロジェクトのリソースディレクトリにコピーし、Maven の依存関係にローカル依存関係として追加します。

<dependency> <groupId>com.aliyun.vod</groupId> <artifactId>upload</artifactId> <version>1.4.15</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/resources/aliyun-java-vod-upload-1.4.15.jar</systemPath> </dependency>Maven 依存関係のサンプル
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.5.1</version> </dependency> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.10.2</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-vod</artifactId> <version>2.16.11</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.68.noneautotype</version> </dependency> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20170516</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.2</version> </dependency> <dependency> <groupId>com.aliyun.vod</groupId> <artifactId>upload</artifactId> <version>1.4.15</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/resources/aliyun-java-vod-upload-1.4.15.jar</systemPath> </dependency>