我正在使用以下代码创建预签名 url:
package main
import (
"fmt"
"log"
"time"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3"
"github.com/kelseyhightower/envconfig"
)
func main() {
configuration := s3.PutObjectInput{ Key: aws.String("default_key") }
// Add Bucket to configuration from environment variable
// e.g:
// CONFIGURATION_BUCKET -> configuration.Bucket
err := envconfig.Process("configuration", &configuration)
if err != nil {
log.Fatal(err.Error())
}
sess := session.Must(session.NewSessionWithOptions(session.Options{
SharedConfigState: session.SharedConfigEnable,
}))
svc := s3.New(sess)
req, _ := svc.PutObjectRequest(&configuration)
url, err := req.Presign(15 * time.Minute)
if err != nil {
log.Fatal(err.Error())
}
fmt.Println("Url is", url)
}
key 始终相同,但存储桶会根据我所在的环境而改变。
当我使用 fmt.Println
打印时,Bucket 和 Key 存在:
fmt.Println(configuration.Bucket, configuration.Key) // returns address
但出现以下错误:required key CONFIGURATION_KEY missing value
谢谢!
最佳答案
如果您查看类型 s3.PutObjectInput
, key
字段有一个 required:"true"
标签。
required
标签也被 envconfig
包使用,以指示环境变量是必需的。
您要么需要从环境中提供 key ,要么不直接将 aws 结构与 envconfig
包一起使用。
关于amazon-web-services - 即使存在也缺少 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48894435/