异步处理(x-oss-async-process)是指程序执行一个任务时,不需要等待该任务完成就能继续执行其他任务。本文介绍如何使用Go SDK V2进行异步处理的场景,例如文档转换、视频转码、视频拼接等。
注意事项
本文示例代码以华东1(杭州)的地域ID
cn-hangzhou
为例,默认使用外网Endpoint,如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见OSS地域和访问域名。本文以从环境变量读取访问凭证为例。如何配置访问凭证,请参见配置访问凭证。
方法定义
func (c *Client) AsyncProcessObject(ctx context.Context, request *AsyncProcessObjectRequest, optFns ...func(*Options)) (*AsyncProcessObjectResult, error)
请求参数列表
参数名 | 类型 | 说明 |
参数名 | 类型 | 说明 |
ctx | context.Context | 请求的上下文,可以用来设置请求的总时限 |
request | *AsyncProcessObjectRequest | 设置具体接口的请求参数,具体请参见AsyncProcessObjectRequest |
optFns | ...func(*Options) | (可选)接口级的配置参数, 具体请参见Options |
返回值列表
返回值名 | 类型 | 说明 |
返回值名 | 类型 | 说明 |
result | *AsyncProcessObjectResult | 接口返回值,当 err 为nil 时有效,具体请参见AsyncProcessObjectResult |
err | error | 请求的状态,当请求失败时,err 不为 nil |
示例代码
以下代码展示了如何使用Go SDK V2进行文档格式转换,将其转换为需要的输出类型。
package main
import (
"context"
"encoding/base64"
"flag"
"fmt"
"log"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)
var (
region string
bucketName string
objectName string
)
// init函数在main函数之前执行,用来初始化程序
func init() {
// 设置命令行参数来指定region
flag.StringVar(®ion, "region", "", "The region in which the bucket is located.")
// 设置命令行参数来指定bucket名称
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
// 设置命令行参数来指定需要进行转换的文档名称
flag.StringVar(&objectName, "object", "", "The name of the object.")
}
func main() {
flag.Parse() // 解析命令行参数
// 检查是否提供了区域信息,如果没有提供,则输出默认参数并退出程序
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 检查是否提供了存储空间名称,如果没有提供,则输出默认参数并退出程序
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// 检查是否提供了对象名称,如果没有提供,则输出默认参数并退出程序
if len(objectName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, object name required")
}
// 创建配置对象,并使用环境变量作为凭证提供者和指定的区域
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg) // 使用配置创建一个新的OSS客户端
// 指定转换后的文件名称
targetKey := "dest.png"
// 构建文档处理样式字符串以及文档转换处理参数
animationStyle := "doc/convert,target_png,source_docx" // 定义将源Docx文档转换为PNG图片的处理规则
// 构建处理指令,包括保存路径和Base64编码的Bucket名称和目标文件名称
bucketNameEncoded := base64.URLEncoding.EncodeToString([]byte(bucketName))
targetKeyEncoded := base64.URLEncoding.EncodeToString([]byte(targetKey))
process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify", animationStyle, bucketNameEncoded, targetKeyEncoded)
// 构建一个AsyncProcessObject请求,用于发起对特定对象的异步处理
request := &oss.AsyncProcessObjectRequest{
Bucket: oss.Ptr(bucketName), // 指定要操作的存储空间名称
Key: oss.Ptr(objectName), // 指定要处理的文档名称
AsyncProcess: oss.Ptr(process),
}
// 执行请求以异步处理对象,并接收返回结果
result, err := client.AsyncProcessObject(context.TODO(), request)
if err != nil {
log.Fatalf("failed to async process object %v", err)
}
log.Printf("async process object result:%#v\n", result)
}
常见使用场景
相关文档
关于异步处理功能的更多信息,请参见异步处理。
关于异步处理功能的API接口,请参见AsyncProcessObject。
该文章对您有帮助吗?
- 本页导读 (1)
- 注意事项
- 方法定义
- 示例代码
- 常见使用场景
- 视频转码
- 视频转动图
- 视频截雪碧图
- 视频截帧
- 视频拼接
- 音频转码
- 音频拼接
- 解析图片盲水印
- 相关文档