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