由于 AK/SK 信息存放在客户端有泄漏风险,在客户端上传的过程中,通常需要服务端配合生成上传签名或凭证,下发给客户端。您可参照以下方法生成临时 Token 用于客户端上传。
服务端根据账号的 AK/SK 信息和相关的 policy 生成临时的上传密钥下发给客户端,客户端根据临时密钥和上传参数自行计算签名并发送 OpenAPI 请求。
调用接口前,请先完成 Go SDK 的安装及初始化操作。
说明
若您在客户端的上传 SDK 中指定了上传文件的存储路径,那么请在获取服务端上传密钥时,请务必在以下示例中添加 imagex.WithUploadKeyPtn("*")
。
imagex.WithUploadPolicy()设置 sts 中的上传相关策略,具体策略参考策略说明。
package main
import (
"fmt"
"github.com/volcengine/volc-sdk-golang/base"
imagex "github.com/volcengine/volc-sdk-golang/service/imagex/v2"
)
// 获取 STS2 的上传密钥(离线的)
func main_GetUploadAuth() {
// 默认 ImageX 实例为 cn-north-1,如果您想使用其他区域的实例,请使用 imagex.NewInstanceWithRegion(区域名) 显式指定区域
instance := imagex.DefaultInstance
instance.SetCredential(base.Credentials{
AccessKeyID: "ak",
SecretAccessKey: "sk",
})
serviceIds := []string{"service id"} // 欲授权的 Service ID
// 默认超时时间为 1小时,如果有需要,请调用 imagex.GetUploadAuthWithExpire() 来设置超时时间
// 您可以使用 imagex.WithUploadKeyPtn("表达式") 来限制上传的存储名格式
// 如: "test/*" 表示上传的文件必须包含 "test/" 前缀
// 使用 imagex.WithUploadOverwrite() 来设置sts中「上传覆盖」选项
// 使用 imagex.WithUploadPolicy() 来设置sts中的上传相关策略
policy := &imagex.UploadPolicy{
ContentTypeBlackList: []string{"image/gif"}, //设置禁止上传的内容类型,此处以 GIF 图片为例
FileSizeUpLimit: "100000", //设置上传文件的大小上限
FileSizeBottomLimit: "500", //设置上传文件的大小下限
}
token, err := instance.GetUploadAuth(serviceIds, imagex.WithUploadOverwrite(true), imagex.WithUploadKeyPtn("*"), imagex.WithUploadPolicy(policy))
if err != nil {
fmt.Printf("error %v", err)
} else {
fmt.Printf("token %+v", token)
}
}