You need to enable JavaScript to run this app.
导航

对 TOS 中私有访问的图片进行处理

最近更新时间2024.01.03 10:40:38

首次发布时间2023.05.31 11:28:26

本文介绍对 TOS 中私有访问的图片进行处理的过程。

前言

目前,TOS 支持处理其存储的图片文件,您可以通过 GetObject 接口,在请求中携带图片处理的相关参数。TOS 支持的图片处理功能包括图片缩放、图片裁剪、图片水印、格式转换等。

TosClient在向服务端发起请求时,默认会对请求Header里包含签名。SDK也支持构造带签名的URL,您可直接用该URL发起HTTP请求,也可以将该URL共享给第三方实现访问授权。本文介绍如何使用预签名的URL执行相应操作,您可参考本文示例进行设置。

关于实验
  • 预计部署时间:30分钟
  • 级别:初级
  • 相关产品:TOS
  • 受众: 通用
实验说明
  • 点击此链接登录控制台。

  • 如果您还没有账户,请点击此链接注册账户。

实验步骤

总体步骤如下:

  • 新建 TOS 存储桶
  • 将图片上传至 TOS 存储桶
  • 对私有图片使用预签名方式生成 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。

二、上传图片文件到 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 图片处理的方式为在对象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 放入浏览器观察效果,如下:

alt

如果您有其他问题,欢迎您联系火山引擎技术支持服务