我在使用 golang 客户端从 AWS S3 存储桶下载大文件时遇到问题,我不是 golang 方面的专家,因此我非常感谢任何帮助。
我正在创建一个简单的 API,该 API 使用 gin-gonic 框架公开一个终端节点,当有人向该终端节点发送请求时,应用程序会从 AWS S3 存储桶下载一个巨大的 CSV 文件,并将文件的内容保存在本地数据库中。
当文件大小为200 mb时,它可以正常工作,但是对于较大的文件,例如500 mb,我开始出现内存错误。
我正在使用这部分代码来创建会话并卸载文件:
sess, _ := session.NewSession(&aws.Config{
Region: aws.String("us-west-2")},
)
downloader := s3manager.NewDownloader(sess)
getInput := &s3.GetObjectInput{
Bucket: aws.String("the bucket name"),
Key: aws.String("the file path"),
}
buff := new(aws.WriteAtBuffer)
_, err := downloader.Download(buff, getInput)
if err != nil {
return nil, errors.New(err, "error downloading file")
}
return buff.Bytes(), nil
在这部分之后,我有一个服务,它接收字节并使用golang CSV阅读器迭代文件内容:
csv.NewReader(bytes.NewReader(theBytes))
在读取器接收字节之前下载文件内容时,会出现此问题。
我的问题是,是否有任何方法可以使用不同的方法来下载代码中的文件(也许在下载器上具有不同的设置)来解决此问题,或者...相反,如果我需要拆分存储桶中的文件内容以减小大小并按部分下载文件。
另一种选择可能是增加golang在应用程序运行时使用的内存。
我不知道在我的情况下哪个可能是最好的解决方案,你有什么建议?
我感谢任何建议或推荐,非常感谢你提前!
一只名叫tom的猫
相关分类