このトピックでは、ApsaraVideo VOD のストレージに各種メディアファイルをアップロードするための PHP 向けサーバー側アップロードソフトウェア開発キット(SDK)の使用方法について、詳細な例を交えて説明します。
概要
説明 PHP 開発には B/S(ブラウザー/サーバー)アーキテクチャが推奨されます。
PHP アップロード SDK は、ApsaraVideo VOD サーバー側 SDK の一般的なプロセスに従います。詳細については、「アップロードプロセス」をご参照ください。PHP アップロード SDK の基本的な使用手順は次のとおりです。
前提条件を満たします。詳細については、「前提条件」をご参照ください。
PHP アップロード SDK を統合します。詳細については、「PHP アップロード SDK の統合」をご参照ください。
アップロードロジックを実装します。これには、アップロード情報の構成が含まれます。
PHP アップロード SDK のデフォルトエンドポイントは cn-shanghai(中国 (上海))です。他のリージョンにメディアファイルをアップロードする場合は、AliyunVodUploader を初期化する際にリージョンを指定できます。ApsaraVideo VOD でサポートされているエンドポイントの詳細については、「エンドポイント」をご参照ください。
次の例は、アップロードリージョンを cn-beijing(中国 (北京))に設定する方法を示しています。
$apiRegionId = 'cn-beijing'; // アップロード先リージョン
$uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret, $apiRegionId);
前提条件
-
ApsaraVideo VOD が有効化されています。詳細については、「ApsaraVideo VOD の有効化」をご参照ください。
-
指定されたリージョンでのストレージパスやコールバック設定など、アップロードに必要なシステム設定が完了しています。詳細については、「ストレージバケットの管理」および「コールバックの構成」をご参照ください。
-
ApsaraVideo VOD へのアクセスに使用する RAM ユーザーが作成されています。Alibaba Cloud アカウントの AccessKey ペアが漏洩した場合に生じるセキュリティリスクを回避するため、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 をハードコードしないでください。漏洩した場合、アカウント内のすべてのリソースが危険にさらされます。
-
任意。セキュリティトークンサービス(STS)を使用して ApsaraVideo VOD にアクセスする場合は、RAM ユーザー用のロールを作成し、そのロールに ApsaraVideo VOD へのアクセスに必要な権限を付与します。詳細については、「STS トークンの取得」をご参照ください。
PHP アップロード SDK の統合
SDK およびデモをダウンロードします。
VodUploadSDK-PHP_1.0.3.zip を解凍し、VodUploadSDK-PHP_1.0.3 ディレクトリ内の voduploadsdk フォルダをプロジェクトにコピーします。
PHP アップロード SDK のディレクトリ構造
パス:VodUploadSDK-PHP_1.0.3/voduploadsdk/uploader
UploadVideoRequest.php
ディレクトリ | 説明 |
UploadVideoRequest | 動画アップロード用のリクエストクラスです。フィールドの詳細については、「CreateUploadVideo」をご参照ください。 |
UploadImageRequest.php
ディレクトリ | 説明 |
UploadImageRequest | 画像アップロード用のリクエストクラスです。フィールドの詳細については、「CreateUploadImage」をご参照ください。 |
UploadAttachedMediaRequest.php
AliyunVodUploader.php
ディレクトリ | 説明 |
__construct | アップロード用の AccessKey、ApsaraVideo VOD センター、およびエンドポイントを設定します。詳細については、「AccessKey」および「ApsaraVideo VOD リージョン ID」をご参照ください。 |
uploadLocalVideo | ローカル動画をアップロードするインターフェイスです。 |
uploadWebVideo | Web 動画をアップロードするインターフェイスです。 |
uploadLocalImage | ローカル画像をアップロードします。 |
uploadWebImage | Web 画像をアップロードします。 |
uploadLocalAttachedMedia | ローカル補助メディアアセットをアップロードします。 |
uploadWebAttachedMedia | Web 補助メディアアセットをアップロードします。 |
uploadLocalM3u8 | ローカル M3U8 ファイルをアップロードします。 |
uploadWebM3u8 | Web M3U8 ファイルをアップロードします。 |
parseM3u8File | M3U8 マニフェストを解析して、シャードアドレスのリストを取得します。 |
setEcsRegionId | ECS インスタンス上にアップロードスクリプトをデプロイしている場合、そのリージョンを設定します。このリージョンが ApsaraVideo VOD ストレージリージョンと同じである場合、内部ネットワークによるアップロードが自動的に有効になります。 |
setEnableSSL | SSL を有効にするかどうかを指定します(ネットワークリクエストに HTTPS を使用)。関連する拡張機能がインストールされていない、または正しく構成されていない場合に問題を回避するため、デフォルトでは無効になっています。 |
uploadProgressCallback | アップロード進捗のコールバック関数です。この関数を書き換えることができます。メソッドシグネチャおよびオーバーライド例については、以下をご参照ください。 |
uploadProgressCallback メソッドシグネチャ
public function uploadProgressCallback($mediaId, $consumedBytes, $totalBytes)
アップロード進捗率(%)を計算するには、100 * ($consumedBytes / $totalBytes) を使用します。$totalBytes が 0 より大きいことを確認してから除算を行い、ゼロ除算を回避してください。
カスタムのアップロード進捗表示を行うには、AliyunVodUploader を継承してこのメソッドをオーバーライドします。次の例はその方法を示しています。
class MyAliyunVodUploader extends AliyunVodUploader {
public function uploadProgressCallback($mediaId, $consumedBytes, $totalBytes) {
if ($totalBytes > 0) {
$rate = 100 * (floatval($consumedBytes) / floatval($totalBytes));
} else {
$rate = 0;
}
echo round($rate, 1) . "%\n";
flush();
}
}
AliyunVodUtils.php
ディレクトリ | 説明 |
AliyunVodUtils | 文字列の切り詰め、ファイル拡張子の取得、ファイル名の取得などの静的関数を提供するユーティリティクラスです。 |
AliyunVodLog | シンプルな出力用のログクラスです。`logSwitch` がログスイッチです。 |
AliyunVodDownloader | Web ファイルをダウンロードします。 |
AliyunVodReportUpload | アップロード進捗を報告します。 |
AliyunVodError | エラーコードを定義します。 |
パス:VodUploadSDK-PHP_1.0.3/voduploadsdk
aliyun-php-sdk-core:アップロード SDK の基底クラスを提供する依存関係です。Alibaba Cloud API の署名、HTTP リクエストなどのコア機能をカプセル化しています。
aliyun-php-sdk-vod:ApsaraVideo VOD 向けのサーバー側 API SDK です。ApsaraVideo VOD API のリクエストをカプセル化しています。
aliyun-php-sdk-oss:アップロード SDK の OSS クラスを提供する依存関係です。OSS アップロード操作および関連機能をカプセル化しています。
パス:VodUploadSDK-PHP_1.0.3/samples
uploadVideo.php:動画アップロードのサンプルコードです。
uploadImage.php:画像アップロードのサンプルコードです。
uploadAttachedMedia.php:補助メディアアセットアップロードのサンプルコードです。
シナリオ 1:音声および動画ファイルのアップロード
標準音声および動画ファイル
次の種類の音声および動画ファイルをアップロードできます。
フラグメントアップロードを使用してローカルファイルをアップロードできます。1 つのファイルの最大サイズは 48.8 TB です。再開可能なアップロードはサポートされていません。詳細については、`testUploadLocalVideo` 関数をご参照ください。
ファイル URL を指定して Web ファイルをアップロードできます。1 つのファイルの最大サイズは 48.8 TB です。この方法では、Web ファイルをローカルディスクにダウンロードした後にアップロードする必要があります。ローカルディスクに十分な空き容量があることを確認してください。詳細については、`testUploadWebVideo` 関数をご参照ください。
サンプルコードを表示
<?php
/**
* Created by Aliyun ApsaraVideo VOD.
*/
require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'voduploadsdk' . DIRECTORY_SEPARATOR . 'Autoloader.php';
date_default_timezone_set('PRC');
// ローカル動画のアップロードをテストします。
function testUploadLocalVideo($accessKeyId, $accessKeySecret, $filePath)
{
try {
$uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
$uploadVideoRequest = new UploadVideoRequest($filePath, 'testUploadLocalVideo via PHP-SDK');
// CateId はメディアカテゴリ ID です。ApsaraVideo VOD コンソールの **[メディア管理]** > **[カテゴリ管理]** ページで確認するか、AddCategory 操作を呼び出して作成できます。詳細については、<!-- @xref node="2526041" -->「[動画カテゴリの管理](https://www.alibabacloud.com/help/ja/vod/user-guide/manage-video-categories)」<!-- @/xref -->をご参照ください。
$uploadVideoRequest->setCateId(<your category ID>);
// 例:CoverURL:http://example.com/example****.jpg
//$uploadVideoRequest->setCoverURL("<your CoverURL>");
//$uploadVideoRequest->setTags('test1,test2');
//$uploadVideoRequest->setStorageLocation('outin-xx.oss-cn-beijing.aliyuncs.com');
$uploadVideoRequest->setTemplateGroupId('your-template-group-id');
$userData = array(
// 例:Callback:https://demo.aliyundoc.com/ProcessMessageCallback
"MessageCallback"=>array("CallbackURL"=>"<your callback URL>"),
"Extend"=>array("localId"=>"xxx", "test"=>"www")
);
$uploadVideoRequest->setUserData(json_encode($userData));
$res = $uploader->uploadLocalVideo($uploadVideoRequest);
print_r($res);
} catch (Exception $e) {
printf("testUploadLocalVideo Failed, ErrorMessage: %s\n Location: %s %s\n Trace: %s\n",
$e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
}
}
// Web 動画のアップロードをテストします。
function testUploadWebVideo($accessKeyId, $accessKeySecret, $fileURL)
{
try {
$uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
$uploadVideoRequest = new UploadVideoRequest($fileURL, 'testUploadWebVideo via PHP-SDK');
$res = $uploader->uploadWebVideo($uploadVideoRequest);
print_r($res);
} catch (Exception $e) {
printf("testUploadWebVideo Failed, ErrorMessage: %s\n Location: %s %s\n Trace: %s\n",
$e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
}
}
#### テストコードの実行 ####
// 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 環境変数を構成してください。
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
$accessKeySecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
$localFilePath = '/opt/video/sample.mp4';
// testUploadLocalVideo($accessKeyId, $accessKeySecret, $localFilePath);
// 例:webFileURL:http://example-bucket-****.cn-shanghai.aliyuncs.com/b55b904bc612463b812990b7c8cc****/daa30814c0c340cf8199926f78aa****-a0bc05ba62c3e95cc672e88b8281****-ld.mp4?auth_key=1608774986-0-0-c56acd302bea0c331370d8ed6865****
$webFileURL = '<your webFileURL>';
testUploadWebVideo($accessKeyId, $accessKeySecret, $webFileURL);
uploadLocalVideo を使用すると、setTemplateGroupId() を呼び出して動画アップロード時にトランスコードテンプレートグループを指定できます。トランスコードテンプレートグループ ID を指定すると、アップロード完了後すぐに動画が自動的にトランスコードされ、SubmitTranscodeJobs 操作を別途呼び出す必要がなくなります。トランスコードテンプレートグループ ID は、VOD コンソールの **[構成管理]** > **[メディア処理構成]** > **[トランスコードテンプレートグループ]** ページで取得できます。
M3U8 動画ファイル
次のコードはその例です。
サンプルコードを表示
<?php
/**
* Created by Aliyun ApsaraVideo VOD.
*/
require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'voduploadsdk' . DIRECTORY_SEPARATOR . 'Autoloader.php';
date_default_timezone_set('PRC');
// ローカル M3U8 動画のアップロードをテストします。
function testUploadLocalM3u8($accessKeyId, $accessKeySecret, $m3u8FilePath)
{
try {
$uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
$uploadVideoRequest = new UploadVideoRequest($m3u8FilePath, 'testUploadLocalM3u8 via PHP-SDK');
// API を呼び出して M3U8 ファイルからシャードアドレスのリストを解析します。解析結果が正確でない場合は、自分でアドレスリストを連結してください。デフォルトでは、シャードファイルと M3U8 ファイルは同じディレクトリにあります。
$sliceFiles = $uploader->parseM3u8File($m3u8FilePath);
//print_r($sliceFiles);
$res = $uploader->uploadLocalM3u8($uploadVideoRequest, $sliceFiles);
print_r($res);
} catch (Exception $e) {
printf("testUploadLocalM3u8 Failed, ErrorMessage: %s\n Location: %s %s\n Trace: %s\n",
$e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
}
}
// Web M3U8 動画のアップロードをテストします。
function testUploadWebM3u8($accessKeyId, $accessKeySecret, $m3u8FileUrl)
{
try {
$uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
$uploadVideoRequest = new UploadVideoRequest($m3u8FileUrl, 'testUploadWebM3u8 via PHP-SDK');
// API を呼び出して M3U8 ファイルからシャードアドレスのリストを解析します。解析結果が正確でない場合は、自分でアドレスリストを連結してください。デフォルトでは、シャードファイルと M3U8 ファイルは同じディレクトリにあります。
$sliceFileUrls = $uploader->parseM3u8File($m3u8FileUrl);
//print_r($sliceFileUrls);
$res = $uploader->uploadWebM3u8($uploadVideoRequest, $sliceFileUrls);
print_r($res);
} catch (Exception $e) {
printf("testUploadWebM3u8 Failed, ErrorMessage: %s\n Location: %s %s\n Trace: %s\n",
$e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
}
}
#### テストコードの実行 ####
// 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 環境変数を構成してください。
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
$accessKeySecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
$localM3u8FilePath = '/opt/video/m3u8/sample.m3u8';
//testUploadLocalM3u8($accessKeyId, $accessKeySecret, $localM3u8FilePath);
// 例:webM3u8FileURL:http://example-bucket-****.cn-shanghai.aliyuncs.com/b55b904bc612463b812990b7c8cc****/daa30814c0c340cf8199926f78aa****-195a25af366b5edae324c47e99a0****-ld.m3u8?auth_key=1608775606-0-0-9fb038deaecd009dadd86721c585****
$webM3u8FileURL = '<your webM3u8FileURL>';
//testUploadWebM3u8($accessKeyId, $accessKeySecret, $webM3u8FileURL);
アップロード高速化
GB または TB 単位の大容量ファイルをアップロードする場合や、中国本土から シンガポール ストレージリージョンなどのストレージの場所へクロスリージョンでアップロードする場合は、アップロード高速化機能を有効にできます。詳細については、「有効化方法」をご参照ください。この機能を有効にした後は、アップロード構成の UserData オブジェクトに AccelerateConfig キー・バリュー ペアを追加する必要があります。UserData オブジェクトが存在しない場合は、新たに作成してください。次のコードはその例です。
$userData = array(
"AccelerateConfig"=>array("Type"=>"oss","Domain"=>"****Bucket.oss-accelerate.aliyuncs.com"),
);
$uploadVideoRequest->setUserData(json_encode($userData));
パラメーターの説明
名前 | タイプ | 説明 |
Type | string | 有効にするアップロード高速化のタイプです。`oss` のみサポートされています。 |
Domain | string | ユーザーのバケット用のアクセラレーションエンドポイントです。デフォルトで HTTPS が使用されます。
説明 有効化後に割り当てられたアクセラレーションエンドポイントを使用してください(例:`vod-*******.oss-accelerate.aliyuncs.com`)。 |
複数動画の一括アップロード
各 uploadLocalVideo または uploadWebVideo の呼び出しは、1 つのビデオファイルのみをアップロードします。1 回の呼び出しで複数のビデオをバッチアップロードすることはサポートされていません。複数のビデオをバッチでアップロードするには、UploadMediaByUrl 操作を呼び出します。
コンソール のアップロードページで動画を一括アップロードする場合も、動画は 1 つずつ処理されます。大容量ファイルまたは複数ファイルをアップロードする必要がある場合は、PC クライアントツールの使用を推奨します。
シナリオ 2:画像のアップロード
サンプルコードを表示
<?php
/**
* Created by Aliyun ApsaraVideo VoD.
* User: https://www.aliyun.com/product/vod
*/
require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'voduploadsdk' . DIRECTORY_SEPARATOR . 'Autoloader.php';
date_default_timezone_set('PRC');
// ローカル画像のアップロードをテストします。
function testUploadLocalImage($accessKeyId, $accessKeySecret, $filePath)
{
try {
$uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
$uploadImageRequest = new UploadImageRequest($filePath, 'testUploadLocalImage via PHP-SDK');
$uploadImageRequest->setCateId(1000009458);
$res = $uploader->uploadLocalImage($uploadImageRequest);
print_r($res);
} catch (Exception $e) {
printf("testUploadLocalImage Failed, ErrorMessage: %s\n", $e->getMessage());
}
}
// Web 画像のアップロードをテストします。
function testUploadWebImage($accessKeyId, $accessKeySecret, $fileURL)
{
try {
$uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
$uploadImageRequest = new UploadImageRequest($fileURL, 'testUploadWebImage via PHP-SDK');
$uploadImageRequest->setCateId(1000009458);
$res = $uploader->uploadWebImage($uploadImageRequest);
print_r($res);
} catch (Exception $e) {
printf("testUploadWebImage Failed, ErrorMessage: %s\n", $e->getMessage());
}
}
#### テストコードの実行 ####
// 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 環境変数を構成してください。
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
$accessKeySecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
$localFilePath = '/opt/image/test-image.jpg';
//testUploadLocalImage($accessKeyId, $accessKeySecret, $localFilePath);
$webFileURL = 'http://vod-download.cn-shanghai.aliyuncs.com/retina/pic/20180208/496AE240-54AE-4CC8-8578-3EEC8F38****.gif';
testUploadWebImage($accessKeyId, $accessKeySecret, $webFileURL);
シナリオ 3:補助メディアアセットのアップロード
次のコードはその例です。
サンプルコードを表示
<?php
/**
* Created by Aliyun ApsaraVideo VoD.
* User: https://www.aliyun.com/product/vod
*/
require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'voduploadsdk' . DIRECTORY_SEPARATOR . 'Autoloader.php';
date_default_timezone_set('PRC');
// ローカル補助メディアアセットのアップロードをテストします。
function testUploadLocalAttachedMedia($accessKeyId, $accessKeySecret, $filePath)
{
try {
$uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
$uploadAttachedRequest = new UploadAttachedMediaRequest($filePath, 'watermark',
'testUploadLocalAttachedMedia via PHP-SDK');
//$uploadAttachedRequest->setCateId(100000****);
$res = $uploader->uploadLocalAttachedMedia($uploadAttachedRequest);
print_r($res);
} catch (Exception $e) {
printf("testUploadLocalAttachedMedia Failed, ErrorMessage: %s\n", $e->getMessage());
}
}
// Web 補助メディアアセットのアップロードをテストします。
function testUploadWebAttachedMedia($accessKeyId, $accessKeySecret, $fileURL)
{
try {
$uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
$uploadAttachedRequest = new UploadAttachedMediaRequest($fileURL, 'watermark',
'testUploadWebAttachedMedia via PHP-SDK');
//$uploadAttachedRequest->setCateId(100000****);
$res = $uploader->uploadWebAttachedMedia($uploadAttachedRequest);
print_r($res);
} catch (Exception $e) {
printf("testUploadWebAttachedMedia Failed, ErrorMessage: %s\n", $e->getMessage());
}
}
#### テストコードの実行 ####
// 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 環境変数を構成してください。
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
$accessKeySecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
$localFilePath = '/opt/image/test.png';
//testUploadLocalAttachedMedia($accessKeyId, $accessKeySecret, $localFilePath);
$webFileURL = 'http://vod-download.cn-shanghai.aliyuncs.com/retina/pic/20180208/496AE240-54AE-4CC8-8578-3EEC8F38****.gif';
testUploadWebAttachedMedia($accessKeyId, $accessKeySecret, $webFileURL);