异步处理(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: $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: $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: $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: $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: $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: $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: $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: $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: $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。