首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Golang从托管在AWS的映像中获取*文件

使用Golang从托管在AWS的映像中获取*文件
EN

Stack Overflow用户
提问于 2016-09-20 01:51:42
回答 1查看 1.6K关注 0票数 0

我可以成功地列出S3存储桶中的所有文件(jpg照片),并使用它创建一个[]s3对象。现在我想从其中一张照片中获取一个指向文件的指针,但我仍然无法下载它们。

代码语言:javascript
复制
package main

import (
    "fmt"
    "log"
    "github.com/aws/aws-sdk-go/aws/credentials"
    "os"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/service/s3"
    //"github.com/aws/aws-sdk-go/service/s3/s3manager"
    "github.com/aws/aws-sdk-go/service/s3/s3manager"
)

func main() {
    acess := "***********"
    secret := "******"
    log.Println(acess + secret)
    creds := credentials.NewStaticCredentials(acess, secret, "")
    _, err := creds.Get()

    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }

    sess := s3.New(session.New(), &aws.Config{
        Credentials: creds,
        Region: aws.String("sa-east-1"),
        //LogLevel:    aws.LogLevel(aws.LogDebug),
    })

    params := &s3.ListObjectsInput{
        Bucket: aws.String("cescocats"),
    }
    //

    resp, err := sess.ListObjects(params)
    if err != nil {
        fmt.Println(err)
        os.Exit(1)
    }

    var allPhotos []s3.Object

    //log.Println(resp.String())
    for _, key := range resp.Contents {
        allPhotos = append(allPhotos, *key)
    }

    log.Println(allPhotos)
    // Set up a new s3manager client

    manager := s3manager.NewDownloader(session.New(), func(d *s3manager.Downloader) {
        d.PartSize = 1 * 1024 * 1024 // 64MB per part
    })
    log.Println(manager)
    buff := new([]byte)


    hehe := s3.GetObjectInput{Key:allPhotos[0].Key}
    manager.Download(aws.WriteAtBuffer{}, hehe)

}

如何使用github.com/aws/aws-sdk-go从S3下载文件?还有别的办法吗?我真的需要下载文件才能获取其内容吗?

EN

回答 1

Stack Overflow用户

发布于 2017-06-06 01:42:14

尝试如下所示:

代码语言:javascript
复制
log.Printf("Fetching s3://%v/%v", bucket, key)

buff := &aws.WriteAtBuffer{}
s3dl := s3manager.NewDownloader(sess)
_, err := s3dl.Download(buff, &s3.GetObjectInput{
    Bucket: aws.String(bucket),
    Key:    aws.String(key),
})

if err != nil {
    log.Printf("Could not download from S3: %v", err)
}

然后,您可以获取buff.Bytes()格式的内容

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39579250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档