非同步處理(x-oss-async-process)是指程式執行一個任務時,不需要等待該任務完成就能繼續執行其他任務。本文介紹如何使用PHP SDK V2進行非同步處理的情境,例如文檔轉換、視頻轉碼、視頻拼接等。
注意事項
本文範例程式碼以華東1(杭州)的地區ID
cn-hangzhou為例,預設使用外網Endpoint,如果您希望通過與OSS同地區的其他阿里雲產品訪問OSS,請使用內網Endpoint。關於OSS支援的Region與Endpoint的對應關係,請參見OSS地區和訪問網域名稱。
範例程式碼
以下代碼展示了如何進行文檔格式轉換,將其轉換為需要的輸出類型。
<?php
// 引入自動負載檔案 載入依賴庫
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// 定義命令列參數描述
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // 地區是必填項 儲存空間所在的地區
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // 終端節點是可選項 其他服務可以用來訪問OSS的網域名稱
"bucket" => ['help' => 'The name of the bucket', 'required' => True], // 儲存空間名稱是必填項
"key" => ['help' => 'The name of the object', 'required' => True], // 對象名稱是必填項
];
// 產生長選項列表 用於解析命令列參數
$longopts = \array_map(function ($key) {
return "$key:"; // 每個參數後面加冒號 表示需要值
}, array_keys($optsdesc));
// 解析命令列參數
$options = getopt("", $longopts);
// 檢查必填參數是否缺失
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // 提示使用者缺少必填參數
exit(1);
}
}
// 擷取命令列參數值
$region = $options["region"]; // 儲存空間所在地區
$bucket = $options["bucket"]; // 儲存空間名稱
$key = $options["key"]; // 對象名稱
// 使用環境變數載入憑證資訊 AccessKeyId 和 AccessKeySecret
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK的預設配置
$cfg = Oss\Config::loadDefault();
// 設定憑證提供者
$cfg->setCredentialsProvider($credentialsProvider);
// 設定地區
$cfg->setRegion($region);
// 如果提供了終端節點 則設定終端節點
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// 建立OSS用戶端執行個體
$client = new Oss\Client($cfg);
// 定義視頻處理樣式 將視頻轉換為指定格式
$style = "video/convert,f_avi,vcodec_h265,s_1920x1080,vb_2000000,fps_30,acodec_aac,ab_100000,sn_1";
// 構造非同步處理指示 包括儲存空間名稱和對象名稱的Base64編碼
$process = sprintf(
"%s|sys/saveas,b_%s,o_%s",
$style,
rtrim(base64_encode($bucket), '='), // Base64編碼儲存空間名稱 去掉末尾的等號
rtrim(base64_encode($key), '=') // Base64編碼對象名稱 去掉末尾的等號
);
// 建立非同步處理對象的請求對象
$request = new Oss\Models\AsyncProcessObjectRequest(
bucket: $bucket, // 儲存空間名稱
key: $key // 對象名稱
);
// 設定處理指示
$request->process = $process;
// 調用asyncProcessObject方法非同步處理對象
$result = $client->asyncProcessObject($request);
// 列印返回結果
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP響應狀態代碼
'request id:' . $result->requestId . PHP_EOL . // 請求的唯一標識
'async process result:' . var_export($result, true) . PHP_EOL // 非同步處理結果
);
常見使用情境
視頻轉碼
您可以使用視頻轉碼功能,修改視頻的編碼格式、降低解析度和碼率以縮小視頻檔案體積、轉換視頻封裝格式。
<?php
// 引入自動負載檔案 載入依賴庫
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// 定義命令列參數描述
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // 地區是必填項 儲存空間所在的地區
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // 終端節點是可選項 其他服務可以用來訪問OSS的網域名稱
"bucket" => ['help' => 'The name of the bucket', 'required' => True], // 儲存空間名稱是必填項
"key" => ['help' => 'The name of the object', 'required' => True], // 對象名稱是必填項
];
// 產生長選項列表 用於解析命令列參數
$longopts = \array_map(function ($key) {
return "$key:"; // 每個參數後面加冒號 表示需要值
}, array_keys($optsdesc));
// 解析命令列參數
$options = getopt("", $longopts);
// 檢查必填參數是否缺失
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // 提示使用者缺少必填參數
exit(1);
}
}
// 擷取命令列參數值
$region = $options["region"]; // 儲存空間所在地區
$bucket = $options["bucket"]; // 儲存空間名稱
$key = $options["key"]; // 對象名稱
// 使用環境變數載入憑證資訊 AccessKeyId 和 AccessKeySecret
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK的預設配置
$cfg = Oss\Config::loadDefault();
// 設定憑證提供者
$cfg->setCredentialsProvider($credentialsProvider);
// 設定地區
$cfg->setRegion($region);
// 如果提供了終端節點 則設定終端節點
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// 建立OSS用戶端執行個體
$client = new Oss\Client($cfg);
// 指定轉碼後的視頻名稱
$targetObject = "dest.avi";
// 定義處理樣式,包括格式、視頻轉碼器、解析度、位元速率、幀率、音訊轉碼器、音頻位元速率等參數
$style = "video/convert,f_avi,vcodec_h265,s_1920x1080,vb_2000000,fps_30,acodec_aac,ab_100000,sn_1";
// 構造非同步處理指示 包括處理樣式以及處理後檔案的儲存位置(儲存桶和對象名經過Base64編碼)
$process = sprintf(
"%s|sys/saveas,b_%s,o_%s",
$style,
rtrim(base64_encode($bucketName), '='), // Base64編碼儲存空間名稱並移除末尾的'='
rtrim(base64_encode($targetObject), '=') // Base64編碼對象名稱並移除末尾的'='
);
// 建立非同步處理對象的請求對象
$request = new Oss\Models\AsyncProcessObjectRequest(
bucket: $bucketName, // 儲存空間名稱
key: $objectName, // 對象名稱
asyncProcess: $process // 非同步處理指示
);
// 調用asyncProcessObject方法非同步處理對象
$result = $client->asyncProcessObject($request);
// 列印返回結果
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP響應狀態代碼
'request id:' . $result->requestId . PHP_EOL . // 請求的唯一標識
'async process result:' . var_export($result, true) . PHP_EOL // 非同步處理結果
);
視頻轉動圖
您可以通過視頻轉動圖功能,將視頻轉換為GIF、WebP等格式的動圖。
<?php
// 引入自動負載檔案 載入依賴庫
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// 定義命令列參數描述
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // 地區是必填項 儲存空間所在的地區
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // 終端節點是可選項 其他服務可以用來訪問OSS的網域名稱
"bucket" => ['help' => 'The name of the bucket', 'required' => True], // 儲存空間名稱是必填項
"key" => ['help' => 'The name of the object', 'required' => True], // 對象名稱是必填項
];
// 產生長選項列表 用於解析命令列參數
$longopts = \array_map(function ($key) {
return "$key:"; // 每個參數後面加冒號 表示需要值
}, array_keys($optsdesc));
// 解析命令列參數
$options = getopt("", $longopts);
// 檢查必填參數是否缺失
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // 提示使用者缺少必填參數
exit(1);
}
}
// 擷取命令列參數值
$region = $options["region"]; // 儲存空間所在地區
$bucket = $options["bucket"]; // 儲存空間名稱
$key = $options["key"]; // 對象名稱
// 使用環境變數載入憑證資訊 AccessKeyId 和 AccessKeySecret
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK的預設配置
$cfg = Oss\Config::loadDefault();
// 設定憑證提供者
$cfg->setCredentialsProvider($credentialsProvider);
// 設定地區
$cfg->setRegion($region);
// 如果提供了終端節點 則設定終端節點
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// 建立OSS用戶端執行個體
$client = new Oss\Client($cfg);
// 指定處理後GIF動圖檔案名稱
$targetKey = "destexample.gif";
// 定義視頻轉GIF動圖的參數,包括GIF寬度、高度、間隔幀數等
$animationStyle = "video/animation,f_gif,w_100,h_100,inter_1000";
// 構造非同步處理指示 包括儲存路徑和Base64編碼的Bucket名稱和目標檔案名稱
$bucketNameEncoded = base64_encode($bucketName); // Base64編碼儲存空間名稱
$targetKeyEncoded = base64_encode($targetKey); // Base64編碼目標檔案名稱
$process = sprintf(
"%s|sys/saveas,b_%s,o_%s/notify,topic_QXVkaW9Db252ZXJ0",
$animationStyle,
$bucketNameEncoded,
$targetKeyEncoded
);
// 建立非同步處理對象的請求對象
$request = new Oss\Models\AsyncProcessObjectRequest(
bucket: $bucketName, // 儲存空間名稱
key: $objectName, // 對象名稱
asyncProcess: $process // 非同步處理指示
);
// 調用asyncProcessObject方法非同步處理對象
$result = $client->asyncProcessObject($request);
// 列印返回結果
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP響應狀態代碼
'request id:' . $result->requestId . PHP_EOL . // 請求的唯一標識
'async process result:' . var_export($result, true) . PHP_EOL // 非同步處理結果
);
視頻截雪碧圖
您可以通過視頻截雪碧圖功能,提取視訊框架並按一定規則拼接為雪碧圖。
<?php
// 引入自動負載檔案 載入依賴庫
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// 定義命令列參數描述
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // 地區是必填項 儲存空間所在的地區
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // 終端節點是可選項 其他服務可以用來訪問OSS的網域名稱
"bucket" => ['help' => 'The name of the bucket', 'required' => True], // 儲存空間名稱是必填項
"key" => ['help' => 'The name of the object', 'required' => True], // 對象名稱是必填項
];
// 產生長選項列表 用於解析命令列參數
$longopts = \array_map(function ($key) {
return "$key:"; // 每個參數後面加冒號 表示需要值
}, array_keys($optsdesc));
// 解析命令列參數
$options = getopt("", $longopts);
// 檢查必填參數是否缺失
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // 提示使用者缺少必填參數
exit(1);
}
}
// 擷取命令列參數值
$region = $options["region"]; // 儲存空間所在地區
$bucket = $options["bucket"]; // 儲存空間名稱
$key = $options["key"]; // 對象名稱
// 使用環境變數載入憑證資訊 AccessKeyId 和 AccessKeySecret
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK的預設配置
$cfg = Oss\Config::loadDefault();
// 設定憑證提供者
$cfg->setCredentialsProvider($credentialsProvider);
// 設定地區
$cfg->setRegion($region);
// 如果提供了終端節點 則設定終端節點
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// 建立OSS用戶端執行個體
$client = new Oss\Client($cfg);
// 指定輸出的雪碧圖檔案名稱
$targetKey = "example.jpg";
// 構建視頻轉雪碧圖參數 包括格式、寬度、高度、間隔幀數等
$animationStyle = "video/sprite,f_jpg,sw_100,sh_100,inter_10000,tw_10,th_10,pad_0,margin_0";
// 構造非同步處理指示 包括儲存路徑和Base64編碼的Bucket名稱和目標檔案名稱
$bucketNameEncoded = base64_encode($bucketName); // Base64編碼儲存空間名稱
$targetKeyEncoded = base64_encode($targetKey); // Base64編碼目標檔案名稱
$process = sprintf(
"%s|sys/saveas,b_%s,o_%s/notify,topic_QXVkaW9Db252ZXJ0",
$animationStyle,
$bucketNameEncoded,
$targetKeyEncoded
);
// 建立非同步處理對象的請求對象
$request = new Oss\Models\AsyncProcessObjectRequest(
bucket: $bucketName, // 儲存空間名稱
key: $objectName, // 對象名稱
asyncProcess: $process // 非同步處理指示
);
// 調用asyncProcessObject方法非同步處理對象
$result = $client->asyncProcessObject($request);
// 列印返回結果
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP響應狀態代碼
'request id:' . $result->requestId . PHP_EOL . // 請求的唯一標識
'async process result:' . var_export($result, true) . PHP_EOL // 非同步處理結果
);
視頻截幀
您可以通過視頻截幀功能,按一定規則提取視訊框架並轉換為需要的圖片格式。
<?php
// 引入自動負載檔案 載入依賴庫
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// 定義命令列參數描述
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // 地區是必填項 儲存空間所在的地區
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // 終端節點是可選項 其他服務可以用來訪問OSS的網域名稱
"bucket" => ['help' => 'The name of the bucket', 'required' => True], // 儲存空間名稱是必填項
"key" => ['help' => 'The name of the object', 'required' => True], // 對象名稱是必填項
];
// 產生長選項列表 用於解析命令列參數
$longopts = \array_map(function ($key) {
return "$key:"; // 每個參數後面加冒號 表示需要值
}, array_keys($optsdesc));
// 解析命令列參數
$options = getopt("", $longopts);
// 檢查必填參數是否缺失
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // 提示使用者缺少必填參數
exit(1);
}
}
// 擷取命令列參數值
$region = $options["region"]; // 儲存空間所在地區
$bucket = $options["bucket"]; // 儲存空間名稱
$key = $options["key"]; // 對象名稱
// 使用環境變數載入憑證資訊 AccessKeyId 和 AccessKeySecret
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK的預設配置
$cfg = Oss\Config::loadDefault();
// 設定憑證提供者
$cfg->setCredentialsProvider($credentialsProvider);
// 設定地區
$cfg->setRegion($region);
// 如果提供了終端節點 則設定終端節點
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// 建立OSS用戶端執行個體
$client = new Oss\Client($cfg);
// 指定按視頻截幀處理後的檔案名稱
$targetKey = "dest.png";
// 構建視頻截幀參數 包括格式、寬度、高度、裁剪方式、間隔幀數等
$animationStyle = "video/snapshots,f_jpg,w_100,h_100,scaletype_crop,inter_10000";
// 構造非同步處理指示 包括儲存路徑和Base64編碼的Bucket名稱和目標檔案名稱
$bucketNameEncoded = base64_encode($bucketName); // Base64編碼儲存空間名稱
$targetKeyEncoded = base64_encode($targetKey); // Base64編碼目標檔案名稱
$process = sprintf(
"%s|sys/saveas,b_%s,o_%s/notify,topic_QXVkaW9Db252ZXJ0",
$animationStyle,
$bucketNameEncoded,
$targetKeyEncoded
);
// 建立非同步處理對象的請求對象
$request = new Oss\Models\AsyncProcessObjectRequest(
bucket: $bucketName, // 儲存空間名稱
key: $objectName, // 對象名稱
asyncProcess: $process // 非同步處理指示
);
// 調用asyncProcessObject方法非同步處理對象
$result = $client->asyncProcessObject($request);
// 列印返回結果
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP響應狀態代碼
'request id:' . $result->requestId . PHP_EOL . // 請求的唯一標識
'async process result:' . var_export($result, true) . PHP_EOL // 非同步處理結果
);
視頻拼接
您可以通過視頻拼接功能,將多個視頻拼接為一個視頻並轉換為需要的格式。
<?php
// 引入自動負載檔案 載入依賴庫
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// 定義命令列參數描述
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // 地區是必填項 儲存空間所在的地區
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // 終端節點是可選項 其他服務可以用來訪問OSS的網域名稱
"bucket" => ['help' => 'The name of the bucket', 'required' => True], // 儲存空間名稱是必填項
"key" => ['help' => 'The name of the object', 'required' => True], // 對象名稱是必填項
];
// 產生長選項列表 用於解析命令列參數
$longopts = \array_map(function ($key) {
return "$key:"; // 每個參數後面加冒號 表示需要值
}, array_keys($optsdesc));
// 解析命令列參數
$options = getopt("", $longopts);
// 檢查必填參數是否缺失
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // 提示使用者缺少必填參數
exit(1);
}
}
// 擷取命令列參數值
$region = $options["region"]; // 儲存空間所在地區
$bucket = $options["bucket"]; // 儲存空間名稱
$key = $options["key"]; // 對象名稱
// 使用環境變數載入憑證資訊 AccessKeyId 和 AccessKeySecret
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK的預設配置
$cfg = Oss\Config::loadDefault();
// 設定憑證提供者
$cfg->setCredentialsProvider($credentialsProvider);
// 設定地區
$cfg->setRegion($region);
// 如果提供了終端節點 則設定終端節點
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// 建立OSS用戶端執行個體
$client = new Oss\Client($cfg);
// 填寫拼接後的視頻檔案名稱
$targetObject = "dest.mp4";
// 指定需要拼接的視頻檔案名稱
$video1 = "concat1.mp4";
$video2 = "concat2.mp4";
// 構建視頻處理的樣式字串以及視頻拼接處理參數
$style = sprintf(
"video/concat,ss_0,f_mp4,vcodec_h264,fps_25,vb_1000000,acodec_aac,ab_96000,ar_48000,ac_2,align_1/pre,o_%s/sur,o_%s,t_0",
rtrim(base64_encode($video1), '='), // Base64編碼第一個視頻檔案名稱並移除末尾的'='
rtrim(base64_encode($video2), '=') // Base64編碼第二個視頻檔案名稱並移除末尾的'='
);
// 構建非同步處理指示
$process = sprintf(
"%s|sys/saveas,b_%s,o_%s/notify,topic_QXVkaW9Db252ZXJ0",
$style,
rtrim(base64_encode($bucketName), '='), // Base64編碼儲存空間名稱並移除末尾的'='
rtrim(base64_encode($targetObject), '=') // Base64編碼目標檔案名稱並移除末尾的'='
);
// 調用asyncProcessObject方法非同步處理對象
$result = $client->asyncProcessObject($request);
// 列印返回結果
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP響應狀態代碼
'request id:' . $result->requestId . PHP_EOL . // 請求的唯一標識
'async process result:' . var_export($result, true) . PHP_EOL // 非同步處理結果
);
音頻轉碼
您可以通過音頻轉碼功能,將音頻轉換為需要的格式。
<?php
// 引入自動負載檔案 載入依賴庫
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// 定義命令列參數描述
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // 地區是必填項 儲存空間所在的地區
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // 終端節點是可選項 其他服務可以用來訪問OSS的網域名稱
"bucket" => ['help' => 'The name of the bucket', 'required' => True], // 儲存空間名稱是必填項
"key" => ['help' => 'The name of the object', 'required' => True], // 對象名稱是必填項
];
// 產生長選項列表 用於解析命令列參數
$longopts = \array_map(function ($key) {
return "$key:"; // 每個參數後面加冒號 表示需要值
}, array_keys($optsdesc));
// 解析命令列參數
$options = getopt("", $longopts);
// 檢查必填參數是否缺失
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // 提示使用者缺少必填參數
exit(1);
}
}
// 擷取命令列參數值
$region = $options["region"]; // 儲存空間所在地區
$bucket = $options["bucket"]; // 儲存空間名稱
$key = $options["key"]; // 對象名稱
// 使用環境變數載入憑證資訊 AccessKeyId 和 AccessKeySecret
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK的預設配置
$cfg = Oss\Config::loadDefault();
// 設定憑證提供者
$cfg->setCredentialsProvider($credentialsProvider);
// 設定地區
$cfg->setRegion($region);
// 如果提供了終端節點 則設定終端節點
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// 建立OSS用戶端執行個體
$client = new Oss\Client($cfg);
// 指定轉碼後的音頻檔案名稱
$targetKey = "dest.aac";
// 構建音頻處理樣式字串以及音頻轉碼處理參數
$animationStyle = "audio/convert,ss_10000,t_60000,f_aac,ab_96000";
// 構造非同步處理指示 包括儲存路徑和Base64編碼的Bucket名稱和目標檔案名稱
$bucketNameEncoded = base64_encode($bucketName); // Base64編碼儲存空間名稱
$targetKeyEncoded = base64_encode($targetKey); // Base64編碼目標檔案名稱
$process = sprintf(
"%s|sys/saveas,b_%s,o_%s/notify,topic_QXVkaW9Db252ZXJ0",
$animationStyle,
$bucketNameEncoded,
$targetKeyEncoded
);
// 建立非同步處理對象的請求對象
$request = new Oss\Models\AsyncProcessObjectRequest(
bucket: $bucketName, // 儲存空間名稱
key: $objectName, // 對象名稱
asyncProcess: $process // 非同步處理指示
);
// 調用asyncProcessObject方法非同步處理對象
$result = $client->asyncProcessObject($request);
// 列印返回結果
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP響應狀態代碼
'request id:' . $result->requestId . PHP_EOL . // 請求的唯一標識
'async process result:' . var_export($result, true) . PHP_EOL // 非同步處理結果
);
音頻拼接
您可以通過音頻拼接功能,將多個音頻拼接為一個音頻並轉換為需要的格式。
<?php
// 引入自動負載檔案 載入依賴庫
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// 定義命令列參數描述
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // 地區是必填項 儲存空間所在的地區
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // 終端節點是可選項 其他服務可以用來訪問OSS的網域名稱
"bucket" => ['help' => 'The name of the bucket', 'required' => True], // 儲存空間名稱是必填項
"key" => ['help' => 'The name of the object', 'required' => True], // 對象名稱是必填項
];
// 產生長選項列表 用於解析命令列參數
$longopts = \array_map(function ($key) {
return "$key:"; // 每個參數後面加冒號 表示需要值
}, array_keys($optsdesc));
// 解析命令列參數
$options = getopt("", $longopts);
// 檢查必填參數是否缺失
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // 提示使用者缺少必填參數
exit(1);
}
}
// 擷取命令列參數值
$region = $options["region"]; // 儲存空間所在地區
$bucket = $options["bucket"]; // 儲存空間名稱
$key = $options["key"]; // 對象名稱
// 使用環境變數載入憑證資訊 AccessKeyId 和 AccessKeySecret
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK的預設配置
$cfg = Oss\Config::loadDefault();
// 設定憑證提供者
$cfg->setCredentialsProvider($credentialsProvider);
// 設定地區
$cfg->setRegion($region);
// 如果提供了終端節點 則設定終端節點
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// 建立OSS用戶端執行個體
$client = new Oss\Client($cfg);
<?php
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// 定義全域變數
$region = ''; // 儲存地區
$bucketName = ''; // 儲存空間名稱
// 解析命令列參數
$options = getopt('', ['region:', 'bucket:']);
// 檢查儲存地區是否為空白
if (empty($options['region'])) {
echo "Error: invalid parameters, region required\n";
exit(1);
}
// 檢查儲存空間名稱是否為空白
if (empty($options['bucket'])) {
echo "Error: invalid parameters, bucket name required\n";
exit(1);
}
// 擷取命令列參數值
$region = $options['region'];
$bucketName = $options['bucket'];
// 使用環境變數載入憑證資訊 AccessKeyId 和 AccessKeySecret
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK的預設配置
$cfg = Oss\Config::loadDefault();
// 設定憑證提供者
$cfg->setCredentialsProvider($credentialsProvider);
// 設定地區
$cfg->setRegion($region);
// 建立OSS用戶端執行個體
$client = new Oss\Client($cfg);
// 需要拼接的音頻檔案名稱
$audio1 = "src1.mp3";
$audio2 = "src2.mp3";
// 指定拼接後的音頻檔案名稱
$targetAudio = "dest.aac";
// 構建音頻處理的樣式字串以及音頻拼接處理參數
$audio1Encoded = base64_encode($audio1); // Base64編碼第一個音頻檔案名稱
$audio2Encoded = base64_encode($audio2); // Base64編碼第二個音頻檔案名稱
$style = sprintf(
"audio/concat,f_aac,ac_1,ar_44100,ab_96000,align_2/pre,o_%s/pre,o_%s,t_0",
$audio1Encoded,
$audio2Encoded
);
// 構造非同步處理指示 包括儲存路徑和Base64編碼的Bucket名稱和目標檔案名稱
$bucketEncoded = base64_encode($bucketName); // Base64編碼儲存空間名稱
$targetEncoded = base64_encode($targetAudio); // Base64編碼目標檔案名稱
$process = sprintf(
"%s|sys/saveas,b_%s,o_%s/notify,topic_QXVkaW9Db252ZXJ0",
$style,
$bucketEncoded,
$targetEncoded
);
// 建立非同步處理對象的請求對象
$request = new Oss\Models\AsyncProcessObjectRequest(
bucket: $bucketName, // 儲存空間名稱
asyncProcess: $process // 非同步處理指示
);
// 調用asyncProcessObject方法非同步處理對象
$result = $client->asyncProcessObject($request);
// 列印返回結果
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP響應狀態代碼
'request id:' . $result->requestId . PHP_EOL . // 請求的唯一標識
'async process result:' . var_export($result, true) . PHP_EOL // 非同步處理結果
);
解析圖片盲浮水印
以下代碼展示了如何解析圖片中的盲浮水印。
<?php
// 引入自動負載檔案 載入依賴庫
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// 定義命令列參數描述
$optsdesc = [
"region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // 地區是必填項 儲存空間所在的地區
"endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // 終端節點是可選項 其他服務可以用來訪問OSS的網域名稱
"bucket" => ['help' => 'The name of the bucket', 'required' => True], // 儲存空間名稱是必填項
"key" => ['help' => 'The name of the object', 'required' => True], // 對象名稱是必填項
];
// 產生長選項列表 用於解析命令列參數
$longopts = \array_map(function ($key) {
return "$key:"; // 每個參數後面加冒號 表示需要值
}, array_keys($optsdesc));
// 解析命令列參數
$options = getopt("", $longopts);
// 檢查必填參數是否缺失
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // 提示使用者缺少必填參數
exit(1);
}
}
// 擷取命令列參數值
$region = $options["region"]; // 儲存空間所在地區
$bucket = $options["bucket"]; // 儲存空間名稱
$key = $options["key"]; // 對象名稱
// 使用環境變數載入憑證資訊 AccessKeyId 和 AccessKeySecret
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK的預設配置
$cfg = Oss\Config::loadDefault();
// 設定憑證提供者
$cfg->setCredentialsProvider($credentialsProvider);
// 設定地區
$cfg->setRegion($region);
// 如果提供了終端節點 則設定終端節點
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// 建立OSS用戶端執行個體
$client = new Oss\Client($cfg);
<?php
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// 定義全域變數
$region = ''; // 儲存地區
$bucketName = ''; // 儲存空間名稱
// 解析命令列參數
$options = getopt('', ['region:', 'bucket:']);
// 檢查儲存地區是否為空白
if (empty($options['region'])) {
echo "Error: invalid parameters, region required\n";
exit(1);
}
// 檢查儲存空間名稱是否為空白
if (empty($options['bucket'])) {
echo "Error: invalid parameters, bucket name required\n";
exit(1);
}
// 擷取命令列參數值
$region = $options['region'];
$bucketName = $options['bucket'];
// 使用環境變數載入憑證資訊 AccessKeyId 和 AccessKeySecret
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// 使用SDK的預設配置
$cfg = Oss\Config::loadDefault();
// 設定憑證提供者
$cfg->setCredentialsProvider($credentialsProvider);
// 設定地區
$cfg->setRegion($region);
// 建立OSS用戶端執行個體
$client = new Oss\Client($cfg);
// 指定浮水印圖檔案名稱
$sourceKey = $objectName; // 指定要處理的圖片對象名稱
// 指定MNS訊息的topic
$topic = "imm-blindwatermark-test";
// 提取指定圖片中的浮水印內容
$style = "image/deblindwatermark,s_low,t_text";
$encodedTopic = rtrim(base64_encode($topic), '='); // Base64編碼並移除末尾的'='
$process = sprintf(
"%s|sys/notify,topic_%s",
$style,
$encodedTopic
);
// 建立非同步處理對象的請求對象
$request = new Oss\Models\AsyncProcessObjectRequest(
bucket: $bucketName, // 儲存空間名稱
key: $sourceKey, // 指定要處理的圖片名稱
asyncProcess: $process // 非同步處理指示
);
// 調用asyncProcessObject方法非同步處理對象
$result = $client->asyncProcessObject($request);
// 列印返回結果
printf(
'status code:' . $result->statusCode . PHP_EOL . // HTTP響應狀態代碼
'request id:' . $result->requestId . PHP_EOL . // 請求的唯一標識
'async process result:' . var_export($result, true) . PHP_EOL // 非同步處理結果
);
相關文檔
關於非同步處理功能的更多資訊,請參見非同步處理。
關於非同步處理功能的程式碼範例,請參見AsyncProcessObject。