这是我当前的代码:
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)
}
我需要file
是从S3下拉的字符串。我要存储的本地文件是S3上的内容的缓存。
这意味着当我尝试提取数据时,需要为该数据创建一个文件。由于要使用的数据库,我实际上不知道我正在访问的密钥是否存在。我想知道以下解决方案中的任何一种是否可行:1)创建某种类型的缓冲区对象,以将整个文件加载到RAM中,而无需实际保存。 2)检查文件是否存在于S3上,而不创建本地文件。这样一来,如果文件不存在,我就可以将其拉下来;如果S3不存在,则不创建空文件。
对不起,但我无法创建游乐场链接,因为去游乐场没有该示例所需的库。
谢谢,尼尔
答案 0 :(得分:1)
buf := aws.NewWriteAtBuffer([]byte{})
downloader.Download(buf, &requestInput)
现在您可以使用buf.Bytes()
https://docs.aws.amazon.com/sdk-for-go/api/aws/#NewWriteAtBuffer