Go语言aws-sdk-go-v2设置AWS S3预签名URL过期时间方法咨询
AWS SDK Go v2 S3预签名URL过期时间设置示例
推荐用法(使用WithPresignExpires方法)
这是SDK官方推荐的设置方式,符合函数式选项的设计规范,代码更简洁:
// 导入依赖 import ( "context" "fmt" "time" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/s3" ) // GeneratePresignedGetURL 生成指定过期时间的S3预签名下载链接 // expires 参数示例:15*time.Minute 代表15分钟后过期 func GeneratePresignedGetURL(cfg aws.Config, bucket, key string, expires time.Duration) (string, error) { s3Client := s3.NewFromConfig(cfg) presignClient := s3.NewPresignClient(s3Client) req, err := presignClient.PresignGetObject( context.TODO(), &s3.GetObjectInput{ Bucket: aws.String(bucket), Key: aws.String(key), }, s3.WithPresignExpires(expires), // 此处设置过期时间 ) if err != nil { return "", fmt.Errorf("presign get object failed: %w", err) } return req.URL, nil }
直接设置PresignOptions.Expires字段的用法
如果你需要自定义更多预签名参数,也可以直接操作结构体字段:
func GeneratePresignedGetURLV2(cfg aws.Config, bucket, key string, expires time.Duration) (string, error) { s3Client := s3.NewFromConfig(cfg) presignClient := s3.NewPresignClient(s3Client) req, err := presignClient.PresignGetObject( context.TODO(), &s3.GetObjectInput{ Bucket: aws.String(bucket), Key: aws.String(key), }, func(opts *s3.PresignOptions) { opts.Expires = expires // 直接设置Expires字段 }, ) if err != nil { return "", fmt.Errorf("presign get object failed: %w", err) } return req.URL, nil }
注意事项
- S3预签名URL的最大有效时长为7天,超过该值的设置会被AWS服务端自动截断为7天
- 过期时间从URL生成的时刻开始计算
- 未主动设置时,默认过期时间为15分钟
内容的提问来源于stack exchange,提问作者tommy_o
相关产品推荐
相关产品推荐

