duanpu1111 2018-08-24 20:38
浏览 165
已采纳

如何将S3数据加载到本地内存中,而不是保存到文件中

This is my current code:

import (
  "time"
  "reflect"
  "io/ioutil"
  "fmt"
  "os"
  "github.com/golang/protobuf/proto"
  "github.com/aws/aws-sdk-go/service/s3"
  "github.com/aws/aws-sdk-go/service/s3/s3manager"
  "github.com/aws/aws-sdk-go/aws"
  "github.com/aws/aws-sdk-go/aws/session"
  "github.com/aws/aws-sdk-go/aws/credentials"
)

f, err := os.Create(filename)
if err != nil {
  panic(fmt.Errorf("failed to create file %q, %v", filename, err))
}
_, err = db.Downloader.Download(f, &s3.GetObjectInput{
    Bucket: aws.String("bucketName"),
    Key:    aws.String("myKeyThatMightExist"),
})
if err != nil { // key doesn't exist
  os.Remove(filename)
  return nil
} else {
  file, err = ioutil.ReadFile(filename)
}

I need file to be a string that is what was pulled down from S3. The local file that I am storing is a cache for what is on S3.

This means that when I try to pull down data, I need to create a file for that data. Due to the database I'm working with, I don't actually know if the key I'm accessing even exists. I was wondering if either of these solutions would be possible: 1) Create some type of buffer object, to load the whole file into RAM, without actually saving it. 2) Check if the file exists on S3, without creating a local file. This would let me then pull down the file if it existed, while not creating an empty file if I didnt exist on S3.

Sorry, but I can't create a playground link, as go playground does not have the libraries I need for this example.

Thanks, Neil

</div>
  • 写回答

1条回答 默认 最新

  • douhui1630 2018-08-25 08:53
    关注
    buf := aws.NewWriteAtBuffer([]byte{})
    downloader.Download(buf, &requestInput)
    

    Now you can use buf.Bytes()

    https://docs.aws.amazon.com/sdk-for-go/api/aws/#NewWriteAtBuffer

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况