我正在尝试使用Go SDK为S3存储桶中的文件创建预签名URL。
当我从命令行运行程序时,我得到的预签名URL不包含X-Amz-Security-Token。
但是如果我从Lambda函数中使用相同的代码,我总是会在URL中获取X-Amz-Security-Token。
我不确定为什么这种行为不同。
以下是代码 -
func CreatePreSignedURL(bucketName string, path string) (string, error) {
sess, err := session.NewSession(&aws.Config{
Region: aws.String("us-east-1")},
)
svc := s3.New(sess)
req, _ := svc.GetObjectRequest(&s3.GetObjectInput{
Bucket: aws.String(bucketName),
Key: aws.String(path),
})
urlStr, err := req.Presign(60 * time.Minute)
if err != nil {
fmt.Println("error in generarting presigned URL is ", err)
return urlStr, err
}
return urlStr, nil
}
lambda 生成的 URL 非常长,我的应用程序需要更短的 URL,不带 X-Amz-Security-Token。
x-amz-security-token
不存在,这也意味着在生成它的当前环境中不需要它。我解决了这个问题,添加了一个 if 语句来检查和处理x-amz-security-token
,只有当它存在时才进行处理,我的前端代码在本地和 lambda 部署中都能正常工作。 - Mattia