本文介绍对 TOS 中私有访问的图片进行处理的过程。
目前,TOS 支持处理其存储的图片文件,您可以通过 GetObject 接口,在请求中携带图片处理的相关参数。TOS 支持的图片处理功能包括图片缩放、图片裁剪、图片水印、格式转换等。
TosClient在向服务端发起请求时,默认会对请求Header里包含签名。SDK也支持构造带签名的URL,您可直接用该URL发起HTTP请求,也可以将该URL共享给第三方实现访问授权。本文介绍如何使用预签名的URL执行相应操作,您可参考本文示例进行设置。
总体步骤如下:
具体操作步骤:
您可以通过控制台、API、SDK、第三方工具新建存储桶。
本示例使用 TOS 命令行工具 tosutil 新建存储桶,您也可以使用其他方式新建存储桶。
关于 tosutil 使用方法,您可以参考此链接。
命令执行如下:
[root@iv-ybtg5t0rk12xxxmidr7t tosutil]# ./tosutil mb tos://imageprocessing Start at 2022-10-23 03:00:48.260776431 +0000 UTC Create bucket [imageprocessing] successfully, request id [6668487d8ce35a4cxxxxxce3-ac1f46b7-1oxg0J-CB-cb-tos-bj-3]
然后使用 tosutil 进行检查桶是否创建成功,如下:
[root@iv-ybtg5t0rk1xxxxmidr7t tosutil]# ./tosutil ls Start at 2022-10-23 03:02:41.0927131 +0000 UTC Bucket CreationDate Location tos://imageprocessing 2022-10-23T03:00:51Z cn-beijing
可以看到已经成功创建存储桶 imageprocessing。
如下:
[root@iv-ybtg5t0rk1xxxxmidr7t tosutil]# ./tosutil cp test.png tos://imageprocessing/test.png Start at 2022-10-23 03:09:21.158079953 +0000 UTC Parallel: 1 Jobs: 5 Threshold: 100.00MB PartSize: auto VerifyChecksum: false CheckpointDir: /root/.tosutil_checkpoint [----------------------------------] 100.00% 597.68KB/s 427.94KB/427.94KB 918ms Upload successfully, 427.94KB, n/a, /root/tosutil/test.png --> tos://imageprocessing/test.png, cost [918], status [200], request id [2a03487d8ee20aa06xxxxxe2-ac161f1c-1oxg8Y-PuO-cb-tos-bj-3]
查看 test.png 属性,如下:
[root@iv-ybtg5t0rk1xxxxmidr7t tosutil]# ./tosutil stat tos://imageprocessing/test.png Start at 2022-10-23 03:11:41.472731633 +0000 UTC Key: tos://imageprocessing/test.png LastModified: 2022-10-23 03:09:22 +0000 UTC Size: 438212 StorageClass: STANDARD HashCrc64ecma: 15722218774810241166 ETag: 9e7b47a510aceb061024c8c41ce01c2a ContentType: image/png Type: file
可以看到图片已经成功上传至存储桶。
url 图片处理的方式为在对象url后加“?x-tos-process=image/” 请求参数,然后“/”后加具体的处理方式,如:resize(图片缩放)、watermark(图片水印)、crop(自定义剪裁)等,然后处理方式后逗号“,”分隔,填写各种处理方式的具体参数。
所有可用处理方式及参数,您可以参考此文档。
说明
对于私有图片,您需要使用 SDK 生成带图片处理参数的预签名 URL,再执行图片处理操作。
生成预签名 URL,本实验处理参数为缩放参数,使用go语言为例:
package main import ( "fmt" "github.com/volcengine/ve-tos-golang-sdk/v2/tos" "github.com/volcengine/ve-tos-golang-sdk/v2/tos/enum" _ "strings" ) func checkErr(err error) { if err != nil { panic(err) } } func main() { var ( accessKey = "您的AK" secretKey = "您的SK" endpoint = "tos-cn-beijing.volces.com" region = "cn-beijing" ) client, err := tos.NewClientV2(endpoint, tos.WithRegion(region), tos.WithCredentials(tos.NewStaticCredentials(accessKey, secretKey))) checkErr(err) preinput := &tos.PreSignedURLInput{ enum.HttpMethodGet, "您的存储桶", "您的对象名称", 3600, map[string]string{}, map[string]string{"x-tos-process":"image/resize,w_100"}, "", } get, err := client.PreSignedURL(preinput) if err !=nil{ fmt.Println(err) } fmt.Println(get.SignedUrl) }
执行上述代码,生成的预签名 URL 如下:
https://imageprocessing.tos-cn-beijing.volces.com/test.png?X-Tos-Algorithm=TOS4-HMAC-SHA256&X-Tos-Credential=AKLTN2QyZmNlZjE0NjxxxxxxxxJlMDdmYTllZmJkOGFjYTU%2F20221123%2Fcn-beijing%2Ftos%2Frequest&X-Tos-Date=20221023T041301Z&X-Tos-Expires=3600&X-Tos-Signature=4e9e160f5xxxxxxxx493a07b4af9f381e2164613e7d6f281ac85b964e8dee560&X-Tos-SignedHeaders=host&x-tos-process=image%2Fresize%2Cw_100
将上述 URL 放入浏览器观察效果,如下:
如果您有其他问题,欢迎您联系火山引擎技术支持服务