我正在使用以下代码创建预先签名的网址:
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)
}
密钥总是一样的,但是桶可以根据我所处的环境而改变。
当我使用fmt.Println
进行打印时,存在Bucket and Key:
fmt.Println(configuration.Bucket, configuration.Key) // returns address
但发生以下错误:required key CONFIGURATION_KEY missing value
谢谢!
答案 0 :(得分:0)
如果您查看s3.PutObjectInput
类型,则key
字段会显示required:"true"
个标记。
required
包也使用envconfig
标记来指示环境变量是必需的。
您需要从环境中提供密钥,或者不直接使用envconfig
包来使用aws结构。