全部產品
Search
文件中心

Object Storage Service:非同步處理(PHP SDK V2)

更新時間:Aug 05, 2025

非同步處理(x-oss-async-process)是指程式執行一個任務時,不需要等待該任務完成就能繼續執行其他任務。本文介紹如何使用PHP SDK V2進行非同步處理的情境,例如文檔轉換、視頻轉碼、視頻拼接等。

注意事項

  • 本文範例程式碼以華東1(杭州)的地區IDcn-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 // 非同步處理結果
);

相關文檔