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

图片处理持久化(Go SDK)

最近更新时间2024.02.04 18:31:08

首次发布时间2023.10.12 11:15:43

TOS 默认不保存处理后的图片。您可以使用代码将处理后的图片保存至指定的存储桶。本文介绍如何通过 TOS Go SDK 将处理后的图片保存至指定存储桶。

注意事项

  • 使用图片处理持久化的账号必须拥有原图所在桶的读权限,图片转存的目标桶的写权限。
  • 使用匿名用户将处理后的图片保存至指定的存储桶时,该存储桶必须为公共写权限。
  • 原图所在桶与图片转存的目标桶必须属于同一地域。
  • 转存图片的访问权限默认为私有,存储类型默认为标准存储。

示例代码

以下代码展示如何将图片高度固定为 100px,图片格式转换为 JPG 格式,然后将处理后的图片命名为 temp.jpg,并保存至目标存储桶。

package main

import (
    "context"
    "encoding/base64"
    "encoding/json"
    "fmt"
    "github.com/volcengine/ve-tos-golang-sdk/v2/tos"
)

func checkErr(err error) {
    if err != nil {
       if serverErr, ok := err.(*tos.TosServerError); ok {
          fmt.Println("Error:", serverErr.Error())
          fmt.Println("Request ID:", serverErr.RequestID)
          fmt.Println("Response Status Code:", serverErr.StatusCode)
          fmt.Println("Response Header:", serverErr.Header)
          fmt.Println("Response Err Code:", serverErr.Code)
          fmt.Println("Response Err Msg:", serverErr.Message)
       } else {
          fmt.Println("Error:", err)
       }
       panic(err)
    }
}

type SaveAsResult struct {
    Bucket   string `json:"bucket"`
    FileSize string `json:"fileSize"`
    Object   string `json:"object"`
    Status   string `json:"status"`
}

func main() {
    var (
       accessKey = os.Getenv("TOS_ACCESS_KEY")
       secretKey = os.Getenv("TOS_SECRET_KEY")
       // Bucket 所在区域对应的 Endpoint,如果以华北2(北京)为例,则 Endpoint 为 https://tos-cn-beijing.volces.com。
       endpoint = "https://tos-cn-beijing.volces.com"
       region   = "cn-beijing"
       // 填写 BucketName
       bucketName = "*** Provide your bucket name ***"

       // 原图名称
       imageKey = "image.png"
       ctx        = context.Background()
       // 指定保存处理后图片的存储桶的名称
       saveBucket = "*** Provide your bucket name ***"
       // 指定处理后图片的名称
       saveObject = "temp.jpg"
    )
    // 初始化客户端
    client, err := tos.NewClientV2(endpoint, tos.WithRegion(region), tos.WithCredentials(tos.NewStaticCredentials(accessKey, secretKey)))
    checkErr(err)

    // 请求并增加数据处理
    style := "image/resize,h_100/format,jpg" /* 将图片高度固定为 100px,并转为 JPG 格式 */
    out, err := client.GetObjectV2(ctx, &tos.GetObjectV2Input{Bucket: bucketName, Key: imageKey, Process: style, SaveBucket: base64.URLEncoding.EncodeToString([]byte(saveBucket)), SaveObject: base64.URLEncoding.EncodeToString([]byte(saveObject))})
    checkErr(err)
    var saveAsResult SaveAsResult
    err = json.NewDecoder(out.Content).Decode(&saveAsResult)
    checkErr(err)
    fmt.Println("Save As Result:", saveAsResult)
}

相关文档

关于图片处理持久化的详细介绍,请参见图片处理持久化