赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 对象存储
  4. 开发参考
  5. SDK参考
  6. PHP
  7. 2.0手册(预览版)
  8. 数据处理
  9. 异步处理

异步处理

  • 数据处理
  • 发布于 2025-04-21
  • 0 次阅读
文档编辑
文档编辑

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

相关文章

同步处理 2025-04-21 18:14

同步处理(x-oss-process)是指程序执行一个任务时,必须等待该任务完成才能继续执行其他任务。本文介绍如何使用PHP SDK V2进行同步处理的场景,例如图片处理、文档处理等。 注意事项 本文示例代码以华东1(杭州)的地域ID

异步处理 2025-04-21 18:14

异步处理(x-oss-async-process)是指程序执行一个任务时,不需要等待该任务完成就能继续执行其他任务。本文介绍如何使用PHP SDK V2进行异步处理的场景,例如文档转换、视频转码、视频拼接等。 注意事项 本文示例代码以华东1(杭州)的地域ID

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号