ApsaraVideo VODが提供するアップロードSDKが、アプリケーションサーバーからファイルをアップロードするための要件を満たさない場合は、Object Storage Service (OSS) SDKを使用してメディアファイルをアップロードできます。 このトピックでは、OSS SDKを使用してメディアファイルをアップロードするプロセスについて説明します。 このトピックでは、特定のプログラミング言語でOSS SDKを使用する手順とサンプルコードについても説明します。
シナリオ
ApsaraVideo VODでは、さまざまな方法でメディアファイルをアップロードできます。 サーバーとクライアントのアップロードSDKは、基本的なアップロードロジックをカプセル化します。 メディアファイルをアップロードする前に、簡単な設定を完了するだけで済みます。 アップロードSDKを使用してメディアファイルをアップロードすることを推奨します。 ただし、サーバーアップロードSDKは、Java、Python、C、C ++ 、およびPHPプログラミング言語のみをサポートします。 などの他のプログラミング言語を使用している場合. NET
およびGoを使用して、OSS SDKを使用してメディアファイルをアップロードできます。 アップロード方法の詳細については、「概要」をご参照ください。
次の表に、さまざまなプログラミング言語でサポートおよび推奨されるアップロード方法を示します。
プログラミング言语 | サポートされているアップロード方法 | 推奨アップロード方法 | 説明 |
Java | サーバーアップロードSDK OSS SDK
説明 このトピックでは、OSS SDKを使用してメディアファイルをアップロードするサンプルコードを提供します。 | サーバーアップロードSDK | 詳細については、次をご参照ください: サーバーからのアップロード |
Python | サーバーアップロードSDK OSS SDK | サーバーアップロードSDK |
C/C++ | サーバーアップロードSDK OSS SDK | サーバーアップロードSDK |
PHP | サーバーアップロードSDK OSS SDK
説明 このトピックでは、OSS SDKを使用してメディアファイルをアップロードするサンプルコードを提供します。 | サーバーアップロードSDK |
Go | OSS SDK
説明 このトピックでは、OSS SDKを使用してメディアファイルをアップロードするサンプルコードを提供します。 | - | アップロードURLと資格情報を取得するには、ApsaraVideo VOD SDKを統合する必要があります。 このトピックでは、OSS SDKを使用してメディアファイルをアップロードするサンプルコードを提供します。 |
.NET | OSS SDK
説明 このトピックでは、OSS SDKを使用してメディアファイルをアップロードするサンプルコードを提供します。 | - |
Node.js | OSS SDK | - | アップロードURLと資格情報を取得するには、ApsaraVideo VOD SDKを統合する必要があります。 このトピックでは、OSS SDKを使用してメディアファイルをアップロードする手順について説明します。 サンプルコードは提供されない。 |
アップロードのプロセス
OSS SDKを使用してメディアファイルをアップロードするには、アップロードプロセス全体のロジックを実装する必要があります。 ApsaraVideo VODからアップロードURLと資格情報を取得し、Base64-encodedアップロードURLと資格情報をデコードしてから、OSS SDKを使用してメディアファイルをアップロードする必要があります。
次の図は、完全なアップロード処理を示しています。 この例では、ApsaraVideo VOD SDKを統合してアップロードURLと認証情報を取得します。
プロセスの説明
アプリケーションサーバーは、RAMユーザーのAccessKey IDとAccessKey secretまたはSecurity Token Service (STS) によって発行された一時的なAccessKeyペアを使用して、ApsaraVideo VODクライアントを初期化します。
アプリケーションサーバーは、アップロードURL、アップロード資格情報、およびメディアアセット情報を取得するために、次のいずれかの操作をApsaraVideo VOD SDKを使用して呼び出します。
説明 HTTPまたはHTTPSリクエストを作成して、アップロードURLと資格情報を取得することもできます。 ただし、リクエストに手動で署名する必要があり、エラーの可能性が高くなります。 URLと資格情報のアップロードに関するAPI操作の詳細については、以下のトピックをご参照ください。
ApsaraVideo VODは、UploadAddressパラメーターでBase64-encodedアップロードURL、UploadAuthパラメーターでBase64-encodedアップロード資格情報、およびメディアIDなどの情報を返します。 アプリケーションサーバーは、返されたパラメーターをデコードし、デコードされた情報を入力パラメーターとして使用してOSS SDKを初期化します。
説明 デコードされたアップロードURLと資格情報の詳細については、「アップロードURLと資格情報のデコードに関する注意事項」をご参照ください。
ApsaraVideo VODは、アップロードURLと資格情報を発行するとメディアIDを生成します。 メディアIDは、ライフサイクル管理およびメディア処理に使用できます。
ApsaraVideo VODは、VideoId
パラメーターでビデオファイルのメディアIDを返します。
ApsaraVideo VODは、ImageId
パラメーターで画像ファイルのメディアIDを返します。
ApsaraVideo VODは、MediaId
パラメーターで補助メディアアセットのメディアIDを返します。
返されたメディアIDは、メディアアセット管理、オーディオおよびビデオの再生、メディア処理などの後続のタスクで必要となるものを適切に保持します。
アプリケーションサーバーは、デコードされたアップロードURL (UploadAddress) とアップロード資格情報 (UploadAuth) を使用して、OSSクライアントをSTSトークンで初期化します。
重要 AccessKeyペアの漏洩を防ぐには、STSトークンを使用してOSS SDKを初期化する必要があります。
アプリケーションサーバーは、OSS SDKを使用して操作を呼び出し、指定されたストレージアドレスにメディアファイルをアップロードします。
OSSはアップロード結果を返します。
説明 アップロード関連のイベントのコールバックを設定して、アップロード結果を受け取ることもできます。
前提条件
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操作に対する権限があります。 RAMユーザーのAccessKeyペアを使用して、API操作を呼び出したり、ルーチンのO&Mを実行したりすることを推奨します。
AccessKey IDとAccessKeyシークレットをプロジェクトコードにハードコードしないことを推奨します。 そうしないと、AccessKeyペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
オプションです。 RAMユーザー用にロールが作成され、Security Token Service (STS) を使用してApsaraVideo VODにアクセスする場合は、ApsaraVideo VODにアクセスするために必要な権限がロールに付与されます。 詳細については、「STSを使用した動画のアップロード」をご参照ください。
手順
このセクションでは、PHP、Go、Java、および .NETのOSS SDKを使用してメディアファイルをアップロードする手順とサンプルコードを提供します。
重要 サンプルコードのパラメーターの値を、ビジネス要件に基づいた実際の値に置き換えます。 URLと資格情報のアップロードに関連するAPI操作の詳細については、以下のトピックを参照してください。
サンプルコードでは、ビデオファイルがアップロードされます。 CreateUploadVideo操作は、アップロードURLと資格情報を取得するために呼び出されます。
ソースコードのデモ
アップロードデモのソースコードは、参考のために提供されています。 次の表に、さまざまなプログラミング言語でのアップロードデモのソースコードへのリンクを示します。
OSS SDK for PHPを使用する手順とサンプルコード
手順1: ApsaraVideo VOD SDKのインストール
詳細については、「クイックスタート」をご参照ください。
手順2: OSS SDKのインストール
aliyun-OSS-PHP-SDKページからoss sdk for phpの最新のソースコードパッケージをダウンロードします。
パッケージを解凍し、解凍したフォルダをaliyun-php-sdkフォルダにコピーします。
たとえば、aliyun-oss-php-sdk-2.4.3.zipをダウンロードして解凍すると、解凍されたフォルダはaliyun-oss-php-sdk-2.4.3になります。 詳細については、「インストール」をご参照ください。
ステップ3: メディアファイルのアップロード
説明 トラブルシューティング方法
不適切なSSL設定により「cURLエラー: SSL証明書の問題」などのエラーが発生した場合は、OSSクライアントを初期化する前にhttpsをhttpに置き換えてください。
$uploadAddress['Endpoint'] = str_replace("https:", "http:", $uploadAddress['Endpoint']);
アップロード資格情報の有効期限が切れた場合、アップロード資格情報を更新し、メディアファイルを再度アップロードする必要があります。 デフォルトでは、アップロード資格情報は3,000秒間有効です。 次のサンプルコードは、アップロード資格情報を更新する方法の例を示しています。
function refresh_upload_video($vodClient, $videoId) {
$request = new vod\RefreshUploadVideoRequest();
$request->setVideoId($videoId);
return $vodClient->getAcsResponse($request);
}
<?php
// 1. Reference the files of ApsaraVideo VOD and OSS in the code.
// In this example, your source code file is in the aliyun-php-sdk folder.
require_once './aliyun-php-sdk/aliyun-php-sdk-core/Config.php';
require_once './aliyun-php-sdk/aliyun-oss-php-sdk-2.4.3/autoload.php';
use vod\Request\V20170321 as vod;
use OSS\OssClient;
use OSS\Core\OssException;
// 2. Initialize an ApsaraVideo VOD client by using an AccessKey pair.
function init_vod_client($accessKeyId, $accessKeySecret) {
// Specify the region in which ApsaraVideo VOD is activated. Example: cn-shanghai.
$regionId = 'cn-shanghai';
$profile = DefaultProfile::getProfile($regionId, $accessKeyId, $accessKeySecret);
return new DefaultAcsClient($profile);
}
// 3. Obtain an upload URL and an upload credential.
function create_upload_video($vodClient) {
$request = new vod\CreateUploadVideoRequest();
$request->setTitle("Video title"); // Required. The title of the video.
$request->setFileName("File name.mov"); // Required. The name of the source video file, which must contain a file name extension.
$request->setDescription("Video description"); // Optional. The description of the source video file.
// CoverURL example: http://example.alicdn.com/tps/TB1qnJ1PVXXXXXCXXXXXXXXXXXX-700-****.png.
$request->setCoverURL("<URL of the video thumbnail>"); // Optional. The URL of the custom video thumbnail.
$request->setTags("Tag 1,Tag 2"); // Optional. The tags of the video. Separate multiple video tags with commas (,).
return $vodClient->getAcsResponse($request);
}
// 4. Use the upload URL and credential to initialize an OSS client with an STS token.
function init_oss_client($uploadAuth, $uploadAddress) {
$ossClient = new OssClient($uploadAuth['AccessKeyId'], $uploadAuth['AccessKeySecret'], $uploadAddress['Endpoint'],
false, $uploadAuth['SecurityToken']);
// The request timeout period. Unit: seconds. Default value: 5184000. We recommend that you set the parameter to a large value because the upload of large files takes a long time.
$ossClient->setTimeout(86400*7);
// The connection timeout period. Unit: seconds. Default value: 10.
$ossClient->setConnectTimeout(10);
return $ossClient;
}
// 5. Upload a video file.
function upload_local_file($ossClient, $uploadAddress, $localFile) {
return $ossClient->uploadFile($uploadAddress['Bucket'], $uploadAddress['FileName'], $localFile);
}
// The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M.
// We recommend that you do not include your AccessKey pair (AccessKey ID and AccessKey secret) in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources within your account may be compromised.
// In this example, ApsaraVideo VOD reads the AccessKey pair from the environment variables to implement identity verification for API access. Before you run the sample code, configure the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET.
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'); // Your AccessKey ID.
$accessKeySecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'); // Your AccessKey secret.
$localFile = '/Users/aligame/Downloads/****.mp4'; // The full path of the local video file to be uploaded to ApsaraVideo VOD.
try {
// Initialize the ApsaraVideo VOD client and obtain the upload URL and credential.
$vodClient = init_vod_client($accessKeyId, $accessKeySecret);
$createRes = create_upload_video($vodClient);
// If the execution is successful, VideoId, UploadAddress, and UploadAuth are returned. Decode the Base64-encoded upload URL and upload credential.
$videoId = $createRes->VideoId;
$uploadAddress = json_decode(base64_decode($createRes->UploadAddress), true);
$uploadAuth = json_decode(base64_decode($createRes->UploadAuth), true);
// Use the obtained upload URL and upload credential to initialize an OSS client.
$ossClient = init_oss_client($uploadAuth, $uploadAddress);
// Upload a video file. Take note that multiple parts are uploaded in parallel. The system starts to upload the next file only when all parts of the current file have been uploaded. The consumed time depends on the file size and upstream bandwidth.
$result = upload_local_file($ossClient, $uploadAddress, $localFile);
printf("Succeed, VideoId: %s", $videoId);
} catch (Exception $e) {
// var_dump($e);
printf("Failed, ErrorMessage: %s", $e->getMessage());
}
OSS SDK for Goを使用する手順とサンプルコード
手順1: ApsaraVideo VOD SDKのインストール
詳細については、次をご参照ください: クイックスタート
手順2: OSS SDKのインストール
重要 次の操作を実行して環境を準備します。
Go 1.7以降をインストールします。 Goの公式ウェブサイトにアクセスして、適切なバージョンをダウンロードできます。
go getまたはglideコマンドを実行して、Alibaba Cloud SDK for Goをインストールします。
go getコマンドを実行して、Alibaba Cloud SDK for Goをインストールします。
go get -u github.com/aliyun/alibaba-cloud-sdk-go/sdk
glideコマンドを実行して、Alibaba Cloud SDK for Goをインストールします。
glide get github.com/aliyun/alibaba-cloud-sdk-go
OSS SDKをインストールします。 詳細については、「インストール」をご参照ください。
ステップ3: メディアファイルのアップロード
package main
import (
"encoding/base64"
"encoding/json"
"fmt"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth/credentials"
"github.com/aliyun/alibaba-cloud-sdk-go/services/vod"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func InitVodClient(accessKeyId string, accessKeySecret string) (client *vod.Client, err error) {
// Specify the storage region of ApsaraVideo VOD.
regionId := "cn-shanghai"
// Create an object for authorization.
credential := &credentials.AccessKeyCredential{
accessKeyId,
accessKeySecret,
}
// The custom configuration parameters.
config := sdk.NewConfig()
config.AutoRetry = true // Specifies whether to automatically reconnect to the network if a connection fails.
config.MaxRetryTime = 3 // The maximum number of retry attempts.
config.Timeout = 3000000000 // The connection timeout period. Unit: nanoseconds. Default value: 3000000000.
// Create a vodClient instance.
return vod.NewClientWithOptions(regionId, config, credential)
}
func MyCreateUploadVideo(client *vod.Client) (response *vod.CreateUploadVideoResponse, err error) {
request := vod.CreateCreateUploadVideoRequest()
request.Title = "Sample Video Title"
request.Description = "Sample Description"
request.FileName = "/opt/video/sample/video_file.mp4"
//request.CateId = "-1"
// Sample URL of the video thumbnail: example:http://example.alicdn.com/tps/TB1qnJ1PVXXXXXCXXXXXXXXXXXX-700-****.png.
request.CoverURL = "<your CoverURL>"
request.Tags = "tag1,tag2"
request.AcceptFormat = "JSON"
return client.CreateUploadVideo(request)
}
func InitOssClient(uploadAuthDTO UploadAuthDTO, uploadAddressDTO UploadAddressDTO) (*oss.Client, error) {
client, err := oss.New(uploadAddressDTO.Endpoint,
uploadAuthDTO.AccessKeyId,
uploadAuthDTO.AccessKeySecret,
oss.SecurityToken(uploadAuthDTO.SecurityToken),
oss.Timeout(86400*7, 86400*7))
return client, err
}
func UploadLocalFile(client *oss.Client, uploadAddressDTO UploadAddressDTO, localFile string) {
// Obtain a storage location.
bucket, err := client.Bucket(uploadAddressDTO.Bucket)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Upload the local file.
err = bucket.PutObjectFromFile(uploadAddressDTO.FileName, localFile)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
type UploadAuthDTO struct {
AccessKeyId string
AccessKeySecret string
SecurityToken string
}
type UploadAddressDTO struct {
Endpoint string
Bucket string
FileName string
}
func main() {
// The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M.
// We recommend that you do not include your AccessKey pair (AccessKey ID and AccessKey secret) in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources within your account may be compromised.
// In this example, ApsaraVideo VOD reads the AccessKey pair from the environment variables to implement identity verification for API access. Before you run the sample code, configure the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET.
var accessKeyId string=os.Getenv ('ALIBABA_CLOUD_ACCESS_KEY_ID'); // Your AccessKey ID.
var accessKeySecret string=os.Getenv ('ALIBABA_CLOUD_ACCESS_KEY_SECRET); // Your AccessKey secret.
var localFile string = "/opt/video/sample/video_file.mp4" // The full path of the local video file to be uploaded to ApsaraVideo VOD.
// Initialize the ApsaraVideo VOD client and obtain the upload URL and credential.
var vodClient, initVodClientErr = InitVodClient(accessKeyId, accessKeySecret)
if initVodClientErr != nil {
fmt.Println("Error:", initVodClientErr)
return
}
// Obtain an upload URL and an upload credential.
var response, createUploadVideoErr = MyCreateUploadVideo(vodClient)
if createUploadVideoErr != nil {
fmt.Println("Error:", createUploadVideoErr)
return
}
// If the execution is successful, VideoId, UploadAddress, and UploadAuth are returned.
var videoId = response.VideoId
var uploadAuthDTO UploadAuthDTO
var uploadAddressDTO UploadAddressDTO
var uploadAuthDecode, _ = base64.StdEncoding.DecodeString(response.UploadAuth)
var uploadAddressDecode, _ = base64.StdEncoding.DecodeString(response.UploadAddress)
json.Unmarshal(uploadAuthDecode, &uploadAuthDTO)
json.Unmarshal(uploadAddressDecode, &uploadAddressDTO)
// Use the obtained upload URL and upload credential to initialize an OSS client.
var ossClient, _ = InitOssClient(uploadAuthDTO, uploadAddressDTO)
// Upload a video file. Take note that multiple parts are uploaded in parallel. The system starts to upload the next file only when all parts of the current file have been uploaded. The consumed time depends on the file size and upstream bandwidth.
UploadLocalFile(ossClient, uploadAddressDTO, localFile)
//MultipartUploadFile(ossClient, uploadAddressDTO, localFile)
fmt.Println("Succeed, VideoId:", videoId)
}
OSS SDK for Javaを使用する手順とサンプルコード
手順1: ApsaraVideo VOD SDKのインストール
詳細については、次をご参照ください: クイックスタート
手順2: OSS SDK for Javaのインストール
詳細については、「インストール」をご参照ください。
ステップ3。 メディアファイルのアップロード
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;
/**
* descript
*/
public class UploadDemo {
public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {
// Specify the region in which ApsaraVideo VOD is activated. Example: cn-shanghai. For more information about other regions, see Overview.
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");
// Sample URL of the video thumbnail: http://example.aliyundoc.com/test_cover_****.jpg.
//request.setCoverURL("<your CoverURL>");
//request.setCateId(-1L);
//request.setTemplateGroupId("");
//request.setWorkflowId("");
//request.setStorageLocation("");
//request.setAppId("app-1000000");
// 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 API operations. We recommend that you use a RAM user to call API operations or perform routine O&M.
// We recommend that you do not include your AccessKey pair (AccessKey ID and AccessKey secret) in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources within your account may be compromised.
// In this example, ApsaraVideo VOD reads the AccessKey pair from the environment variables to implement identity verification for API access. Before you run the sample code, configure the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET.
// Specify your AccessKey ID.
String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
// Specify your AccessKey secret.
String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Specify the full path of the local file that you want to upload to ApsaraVideo VOD. The file name extension must be included in the path.
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 execution is successful, 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 the obtained upload URL and upload credential to initialize an OSS client.
OSSClient ossClient = initOssClient(uploadAuth, uploadAddress);
// Upload a video file. Take note that multiple parts are uploaded in parallel. The system starts to upload the next file only when all parts of the current file have been uploaded. The consumed time depends on the file size and 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));
}
}
OSS SDK for .NETを使用する手順とサンプルコード
手順1: ApsaraVideo VOD SDKのインストール
詳細については、次をご参照ください: クイックスタート
手順2: OSS SDKのインストール
詳細については、「インストール」をご参照ください。
手順3: ApsaraVideo VODクライアントの初期化
public static DefaultAcsClient InitVodClient(string accessKeyId, string accessKeySecret)
{
// Specify the region in which ApsaraVideo VOD is activated. Example: cn-shanghai.
string regionId = "cn-shanghai";
IClientProfile profile = DefaultProfile.GetProfile(regionId, accessKeyId, accessKeySecret);
return new DefaultAcsClient(profile);
}
ステップ4: メディアファイルのアップロード
アップロードURLとアップロード資格情報を取得します。 この例では、ビデオファイルがアップロードされます。
public static CreateUploadVideoResponse CreateUploadVideo(DefaultAcsClient vodClient)
{
CreateUploadVideoRequest request = new CreateUploadVideoRequest();
request.AcceptFormat = Aliyun.Acs.Core.Http.FormatType.JSON;
request.FileName = "vod_test.mp4";
request.Title = "this is title";
// request.Description = "<File description>";
// request.Tags = "<Tags of the video. Separate multiple video tags with commas (,).>";
// Sample URL of the video thumbnail: http://example.aliyundoc.com/test_cover_****.jpg.
// request.CoverURL = "<The video thumbnail URL>";
// The category ID. Log on to the ApsaraVideo VOD console to query the category ID.
//request.CateId = -1;
// The ID of the transcoding template group. Log on to the ApsaraVideo VOD console to query the ID of the transcoding template group.
// request.TemplateGroupId = "<Transcoding template group ID>";
// The ID of the workflow. Log on to the ApsaraVideo VOD console to query the ID of the workflow.
// request.WorkflowId = "<Workflow ID>";
// The storage address of the video file. Log on to the ApsaraVideo VOD console to query the storage address.
// request.StorageLocation = "<Storage address>";
// The value of the AppId parameter is fixed.
//request.AppId = "app-1000000";
// The request timeout period.
request.SetReadTimeoutInMilliSeconds(1000);
request.SetConnectTimeoutInMilliSeconds(1000);
return vodClient.GetAcsResponse(request);
}
Base64-encodedアップロードURLとアップロード資格情報をデコードします。
アップロードURLとアップロード資格情報を使用して、OSSクライアントを初期化します。
例
public static OssClient InitOssClient(JObject uploadAuth, JObject uploadAddress)
{
string endpoint = uploadAddress.GetValue("Endpoint").ToString();
string accessKeyId = uploadAuth.GetValue("AccessKeyId").ToString();
string accessKeySecret = uploadAuth.GetValue("AccessKeySecret").ToString();
string securityToken = uploadAuth.GetValue("SecurityToken").ToString();
return new OssClient(endpoint, accessKeyId, accessKeySecret, securityToken);
}
ローカルファイルをアップロードします。
例
public static void UploadLocalFile(OssClient ossClient, JObject uploadAddress, string localFile)
{
string bucketName = uploadAddress.GetValue("Bucket").ToString();
string objectName = uploadAddress.GetValue("FileName").ToString();
ossClient.PutObject(bucketName, objectName, localFile);
}
(オプション) アップロード資格情報の有効期限が切れた場合は、アップロード資格情報を更新し、メディアファイルを再度アップロードします。
例
public static RefreshUploadVideoResponse RefreshUploadVideo(DefaultAcsClient vodClient)
{
RefreshUploadVideoRequest request = new RefreshUploadVideoRequest();
request.AcceptFormat = Aliyun.Acs.Core.Http.FormatType.JSON;
request.VideoId = "VideoId";
// The request timeout period.
request.SetReadTimeoutInMilliSeconds(1000);
request.SetConnectTimeoutInMilliSeconds(1000);
return vodClient.GetAcsResponse(request);
}
アップロードプロセス全体を実行します。 実行中に例外をキャプチャします。
例
// The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M.
// We recommend that you do not include your AccessKey pair (AccessKey ID and AccessKey secret) in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources within your account may be compromised.
// In this example, ApsaraVideo VOD reads the AccessKey pair from the environment variables to implement identity verification for API access. Before you run the sample code, configure the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET.
// Specify your AccessKey ID.
String accessKeyId = System.Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID");
// Specify your AccessKey secret.
String accessKeySecret = System.Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Specify the full path of the local file that you want to upload to ApsaraVideo VOD. The file name extension must be included in the path.
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 execution is successful, VideoId, UploadAddress, and UploadAuth are returned.
String videoId = createUploadVideoResponse.VideoId;
JObject uploadAuth = JObject.Parse(Base64Decode(createUploadVideoResponse.UploadAuth));
JObject uploadAddress = JObject.Parse(Base64Decode(createUploadVideoResponse.UploadAddress));
// Use the obtained upload URL and upload credential to initialize an OSS client.
OssClient ossClient = InitOssClient(uploadAuth, uploadAddress);
// Upload a video file. Take note that multiple parts are uploaded in parallel. The system starts to upload the next file only when all parts of the current file have been uploaded. The consumed time depends on the file size and upstream bandwidth.
UploadLocalFile(ossClient, uploadAddress, localFile);
Console.WriteLine("Put local file succeed, VideoId : " + videoId);
}
catch (Exception e)
{
Console.WriteLine("Put local file fail, ErrorMessage : " + e.Message);
}
他のプログラミング言語の参照
上記のプログラミング言語のアップロードSDKとサンプルコードがビジネス要件を満たせない場合は、次の表でプログラミング言語の参照を確認してください。
説明 ApsaraVideo VODが提供するアップロードSDKの詳細については、関連トピックを参照してください。 PHP、Java、Go、およびOSS SDKを使用してメディアファイルをアップロードする方法について説明します。このトピックのサンプルコードを参照してください。
アップロードURLと資格情報のデコードに関する注意事項
Base64アルゴリズムを使用して、ApsaraVideo VODによって返されたUploadAddressパラメーターとUploadAuthパラメーターの値をデコードし、アップロードURLと資格情報を取得できます。 デコードされたアップロードURLと資格情報を使用して、OSSクライアントを初期化できます。
説明 Base64デコードは開発者にとって一般的なタスクです。 したがって、このトピックでは特定のツールについて説明しません。 このセクションでは、uploadAddressおよびuploadAuthパラメーターからデコードされたフィールドについて説明します。
表 1. UploadAddressパラメーターからデコードされたフィールド
項目 | 説明 |
バケット | ApsaraVideo VODの保存場所。 |
エンドポイント | ApsaraVideo VODストレージリージョンのエンドポイント。 |
FileName | ApsaraVideo VODによってアップロードするメディアファイルに割り当てられた名前。 |
オブジェクトプレフィックス | M3U8ファイルに対してのみ返されるフィールド。 |
表 2. UploadAuthパラメーターからデコードされたフィールド
項目 | 説明 |
AccessKeyId | メディアファイルのアップロードに使用されるアカウントのAccessKey ID。 |
AccessKeySecret | メディアファイルのアップロードに使用されるアカウントのAccessKeyシークレット。 |
SecurityToken | アップロード認証用のセキュリティトークン。 |
ExpireUTCTime | アップロードURLとアップロード資格情報の有効期限。 日時は ISO 8601 規格 (yyyy-MM-ddTHH:mm:ssZ 形式) に準拠します。 時刻は UTC で表示されます。 |
有効期限 | アップロード資格情報の有効期限。 アップロード資格情報の有効期間は3,000秒です。 有効期限が切れた後、アップロード資格情報を更新する必要があります。 |
リージョン | ストレージリージョンのID。 |
次のコードは、デコード前後のアップロードURLと資格情報のサンプルを示しています。
デコード前のサンプルUploadAddressおよびUploadAuthパラメーター
{
"VideoId": "1c1255e7e58d4d7487d0c1852954****",
"UploadAddress": "eyJFbmRwb2ludCI6Imh0dHBzOi8vb3NzLWNuLXNoYW5naGFpLmFsaXl1bmNzLmNvbSIsIkJ1Y2tldCI6InZvZC1zaGFuZ2hhaS1rYXNpIiwiRmlsZU5hbWUiOiJ2b2QtZjFlOGM0L3N2LzFhYmUyZDVjLTE3ZWU3Zjc3ZjA0LzFhYmUyZDVjLTE3ZWU3Zjc3ZjA0Lm1w****",
"RequestId": "2975D91A-F89F-5EBF-97D5-07028C90****",
"UploadAuth": "eyJTZWN1cml0eVRva2VuIjoiQ0FJUzhRUjFxNkZ0NUIyeWZTaklyNWZNQ3Z6NWg1aFEzWVc2VVhmVDEwNFpXUGtVaHE3Z3B6ejJJSGhFZjNWdEErOGN0LzQxbFdsVzUvWWFscklxRk1NVkhSMlVNWkFvdjgwT3ExLzdKb0hidk5ldTBic0hoWnY5OEtzbG9waThqcUhvZU96Y1lJNzN2cHpQQWdtMldFUVJySkwrY1RLOUpaZlBVL21nZ29KbWFkSTZSeFN4YVNFOGF2NWRPZ3BscnIzNFh4bTBNdTIyWUNiM25rM2FEa2RqcG1nYWpuaGt1NXk0MmRHNzRCalRoMEdZc3VnT3ZOYllPb0NwYWNWTE5wVnlXTXZYdXV0dGJmamgzU2RjekJKSStheHE3dFZENGl5VmtkeUJKRk5UN2g2YUZ1ZkkrNzhjS3hSaU5JazhHckpGcGVUeHNPQjhwdTNMbnA3cjlnNUpPdWhaTVYvWVg1dnk1ZGJBQk9LeFA4d2xTSzcvUEgzQnNMYUlMWUtuamhzZ1puc1hEQXBRWjdoYkxXUnJXeUUwVGpiVEpwZXU0a3poWlIreUtkdUN5N3BrK3AxdzExSGw0ZGV2T2x5VFFxMlF5em9sSXBzN1prOUtSeGtOeGo3SWVLZ2NieWxSZDA5bUg3K1BVYmhyYUJkWHBjR1l1aGJKQkFsaDFXMXlvdm5pWnV2Zm9Md2ljWUg0VjU1ZHMrOGFmNDhVbDJveFUyeitVYTYxOEZoMkVsWm9XckZMeXFMZ0ZJYWk0YnVldW9XcGJQWEJGK29NdHlkcEV3SFlwREhmVG1oTGYyK2pwSTg5YmxiZDRNVFl5cVBNK3BJbEV3STE1NWRCQ2czQWY0OWcvMWM2cExDc3FFMmErdUs1WGkyaHV6Tm45OVNIOGRZUTV4TTRPYTZ0aWVMSXNtUFYrU1hQYktSbWxwaUlWalV6QnhHdkoxNEJtYS9PMWlwVzkweGF5ekR0WWt4RHNXNzhqempnSUpjcHRkV1EzVzVCRDZ0cG51RFZkaXl0NUcwSUM2alN1K1pRQmI0NEk3b1hDS3p0aEY4NGxxWDkwelMwdXB6Y3R5bENTOEw1ZWJJN1o1SnlCQmIrOEJzNXppV3FXRGtKR29BQmg1Z3M3YlVOZEs2NGdVaThRM2tOdWpVZFdiZTFTb1Y1cVZJOEdmTkYvZ1g0MUNvWGlrSHhwN3FwOTBpMFBSd1h5VUc4WEVkVGUxY3RZbGEwZG9WeGhtNThOQVdoR0pEOXQxK21iWjd4ZUFkczNqT3NpSUNPb25Ib3JWYmNUb0s2VGs3cjNxejZHSlgybE54djVmWTBvUWZsSTJNQWR0cHo5WnJidnZ5eUFjYz0iLCJBY2Nlc3NLZXlJZCI6IlNUUy5OVHlBRk1qR3FqR1FTUWIzTkxUdjhpa0tFIiwiRXhwaXJlVVRDVGltZSI6IjIwMjItMDItMTFUMDk6NTc6NDNaIiwiQWNjZXNzS2V5U2VjcmV0IjoiOWZGUXQyeVJSWTZGMVBFb0hNS1dMYmFmeHlSd1BNNjFuRUhDbzZDTWlQZCIsIkV4cGlyYXRpb24iOiIzNjAwIiwiUmVnaW9uIjoiY24tc2hhbmdoYWk****"
}
デコード後のサンプルUploadAddressパラメーター
{
"Endpoint": "https://******.aliyuncs.com",
"Bucket": "vod-shanghai-****",
"FileName": "vod-f1e8c4/sv/1abe2d5c-17ee7f77f04/1abe2d5c-17ee7f7****.mp4"
}
重要 M3U8ファイルがアップロードされると、ObjectPrefix
フィールドはUploadAddress
パラメーターからデコードされます。 例:
M3U8ファイルのデコード後のサンプルUploadAddressパラメーター
{
"Endpoint": "https://******.aliyuncs.com",
"Bucket": "vod-shanghai-****",
"FileName": "vod-f1e8c4/sv/1abe2d5c-17ee7f77f04/1abe2d5c-17ee7f7****.mp4"
}
デコード後のサンプルUploadAuthパラメーター
{
"SecurityToken": "CAIS8QR1q6Ft5B2yfSjIr5fMCvz5h5hQ3YW6UXfT104ZWPkUhq7gpzz2IHhEf3VtA+8ct/41lWlW5/YalrIqFMMVHR2UMZAov80Oq1/7JoHbvNeu0bsHhZv98Kslopi8jqHoeOzcYI73vpzPAgm2WEQRrJL+cTK9JZfPU/mggoJmadI6RxSxaSE8av5dOgplrr34Xxm0Mu22YCb3nk3aDkdjpmgajnhku5y42dG74BjTh0GYsugOvNbYOoCpacVLNpVyWMvXuuttbfjh3SdczBJI+axq7tVD4iyVkdyBJFNT7h6aFufI+78cKxRiNIk8GrJFpeTxsOB8pu3Lnp7r9g5JOuhZMV/YX5vy5dbABOKxP8wlSK7/PH3BsLaILYKnjhsgZnsXDApQZ7hbLWRrWyE0TjbTJpeu4kzhZR+yKduCy7pk+p1w11Hl4devOlyTQq2QyzolIps7Zk9KRxkNxj7IeKgcbylRd09mH7+PUbhraBdXpcGYuhbJBAlh1W1yovniZuvfoLwicYH4V55ds+8af48Ul2oxU2z+Ua618Fh2ElZoWrFLyqLgFIai4bueuoWpbPXBF+oMtydpEwHYpDHfTmhLf2+jpI89blbd4MTYyqPM+pIlEwI155dBCg3Af49g/1c6pLCsqE2a+uK5Xi2huzNn99SH8dYQ5xM4Oa6tieLIsmPV+SXPbKRmlpiIVjUzBxGvJ14Bma/O1ipW90xayzDtYkxDsW78jzjgIJcptdWQ3W5BD6tpnuDVdiyt5G0IC6jSu+ZQBb44I7oXCKzthF84lqX90zS0upzctylCS8L5ebI7Z5JyBBb+8Bs5ziWqWDkJGoABh5gs7bUNdK64gUi8Q3kNujUdWbe1SoV5qVI8GfNF/gX41CoXikHxp7qp90i0PRwXyUG8XEdTe1ctYla0doVxhm58NAWhGJD9t1+mbZ7xeAds3jOsiICOonHorVbcToK6Tk7r3qz6GJX2lNxv5fY0oQflI2MAdtpz9Zrbvvy****",
"AccessKeyId": "STS.NTyAFMjGqjGQSQb3NLTv8****",
"ExpireUTCTime": "2022-02-11T******",
"AccessKeySecret": "9fFQt2yRRY6F1PEoHMKWLbafxyRwPM61nEHCo6C****",
"Expiration": "****",
"Region": "cn-shanghai"
}