Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

腾讯云 COS 对象存储

Feature: cos

📖 官方文档:https://cloud.tencent.com/document/product/436

配置

[cos]
secret_id = ""       # 必填
secret_key = ""      # 必填
bucket = ""          # 必填, 格式: {bucketname}-{appid}
region = ""          # 必填, 如 "ap-guangzhou"
prefix = ""          # 上传目录前缀
domain = ""          # 自定义域名
url_expire = 3600    # 签名 URL 有效期(秒)

API

Cos

方法参数返回说明
get_signed_download_urlkey: &strResult<String>生成下载签名 URL
get_signed_upload_urlkey: &str, content_type: &strResult<String>生成上传签名 URL
get_access_urlstored_key: &strResult<String>生成访问 URL(自动拼接 prefix)
get_signed_urlskeys: &[&str]Result<Vec<String>>批量生成下载 URL
get_signed_image_urlkey: &str, params: &strResult<String>生成带图片处理参数的签名 URL
get_signed_style_urlkey: &str, style_name: &strResult<String>生成带预定义样式的签名 URL
get_signed_video_snapshotkey, time_sec, w, h, formatResult<String>视频截帧签名 URL
get_signed_video_coverkey, w, hResult<String>视频封面截帧(简化版)

错误码

English中文
51201HMAC-SHA1 init failedHMAC-SHA1 初始化失败

使用示例

#![allow(unused)]
fn main() {
// 生成下载 URL
let url = state.cos.get_signed_download_url("abc123.png").await?;

// 生成上传 URL(指定 Content-Type)
let url = state.cos.get_signed_upload_url("abc123.png", "image/png").await?;

// 自动拼接 prefix 生成访问 URL
let url = state.cos.get_access_url("abc123.png").await?;

// 批量生成下载 URL
let urls = state.cos.get_signed_urls(&["a.png", "b.png"]).await?;
}

图片处理

COS 通过数据万象提供图片处理能力,在 URL 后附加处理参数即可。

📖 参考文档:图片处理机制介绍

实时处理参数

使用 get_signed_image_url 附加图片处理参数:

#![allow(unused)]
fn main() {
// 缩放到 300px 宽
let url = state.cos.get_signed_image_url("photo.jpg", "imageMogr2/resize/w_300").await?;

// 缩放 + 质量
let url = state.cos.get_signed_image_url("photo.jpg", "imageMogr2/resize/w_300/quality/90").await?;

// 格式转换
let url = state.cos.get_signed_image_url("photo.jpg", "imageMogr2/format/webp").await?;

// 缩略图(百分比)
let url = state.cos.get_signed_image_url("photo.jpg", "imageMogr2/thumbnail/!50p").await?;

// 链式处理
let url = state.cos.get_signed_image_url("photo.jpg", "imageMogr2/resize/w_300/quality/90/format/webp").await?;
}

常用处理参数:

参数说明示例
imageMogr2/resize图片缩放imageMogr2/resize/w_300 / imageMogr2/resize/w_300/h_200
imageMogr2/quality质量变换imageMogr2/quality/90
imageMogr2/format格式转换imageMogr2/format/webp
imageMogr2/crop自定义裁剪imageMogr2/crop/w_100/h_100/x_10/y_10
imageMogr2/rotate旋转imageMogr2/rotate/90
imageMogr2/blur模糊效果imageMogr2/blur/r_5/s_2
imageMogr2/roundPic圆角裁剪imageMogr2/roundPic/r_20
imageMogr2/thumbnail缩略图imageMogr2/thumbnail/!50p / imageMogr2/thumbnail/200x200
imageMogr2/interlace渐进显示imageMogr2/interlace/1
imageMogr2/averageHue获取主色调imageMogr2/averageHue

多个参数可链式拼接:imageMogr2/resize/w_300/quality/90/format/webp

预定义样式

在腾讯云 COS 控制台创建预定义样式后,通过样式名引用:

#![allow(unused)]
fn main() {
// 使用缩略图样式
let url = state.cos.get_signed_style_url("photo.jpg", "thumbnail").await?;

// 使用头像样式
let url = state.cos.get_signed_style_url("photo.jpg", "avatar_s").await?;
}

视频截帧

COS 支持从视频中截取指定时间点的帧作为图片。

📖 参考文档:视频截帧

获取视频封面

#![allow(unused)]
fn main() {
// 获取视频封面(第 0 秒),800px 宽
let url = state.cos.get_signed_video_cover("video.mp4", 800, 0).await?;

// 获取视频封面,指定宽高
let url = state.cos.get_signed_video_cover("video.mp4", 800, 600).await?;
}

截取指定时间点

#![allow(unused)]
fn main() {
// 截取第 17 秒处的帧,800x600,JPG 格式
let url = state.cos
    .get_signed_video_snapshot("video.mp4", 17, 800, 600, "jpg")
    .await?;

// 输出 PNG 格式
let url = state.cos
    .get_signed_video_snapshot("video.mp4", 5, 0, 0, "png")
    .await?;
}

参数说明

参数说明
time_sec截取时间点(秒),0 = 封面
width输出宽度(像素),0 = 自动
height输出高度(像素),0 = 自动
format输出格式:"jpg""png"

签名算法

COS 使用基于 HMAC-SHA1 的签名机制:

KeyTime      = {Now};{Expires}              (Unix 时间戳)
SignKey      = HMAC-SHA1(SecretKey, KeyTime)
HttpString   = {Method}\n{URI}\n{Params}\n{Headers}\n
StringToSign = sha1\n{KeyTime}\nSHA1(HttpString)\n
Signature    = HMAC-SHA1(SignKey, StringToSign)

签名参数通过 URL query string 传递(预签名 URL 方式)。