You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 23:15:05