继续学习Go,我正在编写一个管理图片的组件。
我一直在这里查看s3库:https://godoc.org/launchpad.net/goamz/s3#ACL
在Node中,我使用Knox客户端并连接到我的存储桶,如下所示:
var bucket = knox.createClient({
key: config.get('AWS_KEY'),
secret: config.get('AWS_SECRET'),
bucket: "bucketName"
});
在Go s3库中,我看到了使用s3存储桶所需的所有功能,但我无法找到连接功能 - 与上面的相似。
到目前为止,我已在Docs中找到了这个:
type Auth struct {
AccessKey, SecretKey string
}
似乎我需要调用此函数:
func EnvAuth() (auth Auth, err error)
这是EnvAuth功能:
func EnvAuth() (auth Auth, err error) {
auth.AccessKey = os.Getenv("AWS_ACCESS_KEY_ID")
auth.SecretKey = os.Getenv("AWS_SECRET_ACCESS_KEY")
// We fallback to EC2_ env variables if the AWS_ variants are not used.
if auth.AccessKey == "" && auth.SecretKey == "" {
auth.AccessKey = os.Getenv("EC2_ACCESS_KEY")
auth.SecretKey = os.Getenv("EC2_SECRET_KEY")
}
if auth.AccessKey == "" {
err = errors.New("AWS_ACCESS_KEY_ID not found in environment")
}
if auth.SecretKey == "" {
err = errors.New("AWS_SECRET_ACCESS_KEY not found in environment")
}
return
}
在S3文档中,我看到了我需要的所有内容。我只是不确定我是如何使用该库的,这是我第一次使用Go库。
关于连接到AWS / S3,然后进行删除调用的指南非常有帮助!
非常感谢:)
答案 0 :(得分:25)
这可能比你想象的要容易。此示例代码列出了一个存储桶。您必须使用凭据和存储桶名称,当然......
package main
import (
"fmt"
"launchpad.net/goamz/aws"
"launchpad.net/goamz/s3"
"log"
)
func main() {
auth := aws.Auth{
AccessKey: "ASDFASDFASDFASDK",
SecretKey: "DSFSDFDWESDADSFASDFADFDSFASDF",
}
euwest := aws.EUWest
connection := s3.New(auth, euwest)
mybucket := connection.Bucket("mytotallysecretbucket")
res, err := mybucket.List("", "", "", 1000)
if err != nil {
log.Fatal(err)
}
for _, v := range res.Contents {
fmt.Println(v.Key)
}
}
答案 1 :(得分:11)
原帖使用goamz库。 AWS维护着应该使用的official aws-sdk-go library。
请参阅以下示例中的connect方法,该方法使用来自AWS的官方Go sdk列出特定存储桶中的所有密钥:
package main
import (
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3"
)
func main() {
svc := s3.New(session.New(), &aws.Config{Region: aws.String("us-east-1")})
params := &s3.ListObjectsInput{
Bucket: aws.String("bucket"),
}
resp, _ := svc.ListObjects(params)
for _, key := range resp.Contents {
fmt.Println(*key.Key)
}
}