doula4096 2016-09-19 17:51
浏览 89

使用Golang从AWS托管的图像获取*文件

I can succeffully list all files(jpg photos) inside a S3 Bucket and make an []s3.Objects with it. Now I want to get a pointer to file from one of those photos, but I still cannot download them.

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)

}

How do download a file from S3 using github.com/aws/aws-sdk-go ? Is there any other way? Do I really need to download the file to get its content?

  • 写回答

1条回答 默认 最新

  • duanbinian2243 2017-06-05 17:42
    关注

    Try something like this:

    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)
    }
    

    Then you can get the contents as buff.Bytes()

    评论

报告相同问题?

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c