如何使用 AWS 开发工具包从 S3 下载对象 - RESTful

Posted

技术标签:

【中文标题】如何使用 AWS 开发工具包从 S3 下载对象 - RESTful【英文标题】:How to download objects from S3 using AWS SDK - RESTful 【发布时间】:2020-08-05 17:56:34 【问题描述】:

我正在寻找一种以编程方式将图像从 S3 存储桶下载到我的计算机的方法。

我尝试了“Using send_file to download a file from Amazon S3?”,但它只是将我重定向到一个仅显示我的 PDF 对象的链接。

这是我使用AWS documentation的下载功能:

s3 = Aws::S3::Resource.new(region: 'us-east-2')
obj = s3.bucket('bucket').object('image')
obj.get(response_target: '~/')

这是我从链接中下载的代码:

data = open("https://#bucket.s3.amazonaws.com/#filepath")
send_data data.read, filename: "file.pdf", type: "application/pdf", disposition: 'inline', stream: 'true', buffer_size: '4096'

obj.get 令人困惑的是:我想将其下载到我的计算机,而不是我的代码库。

有人说下载链接只是我存储桶中的图像链接,如果它设置为公共,它就是。这是怎么回事?

最终解决方案:将处置更改为“附件”

data = open("https://#bucket.s3.amazonaws.com/#filepath")
send_data data.read, filename: "file.pdf", type: "application/pdf", disposition: 'attachment', stream: 'true', buffer_size: '4096'

【问题讨论】:

欢迎来到 SO。快速搜索会发现 aws.amazon.com/blogs/developer/… 和 docs.aws.amazon.com/sdk-for-ruby/v3/developer-guide/… “不是我的代码库”是什么意思? 另外,***.com/q/8659382/128421 包含 CLI 解决方案,这些解决方案很容易用 Ruby 封装和编写脚本。 @theTinMan 我不是在寻找 wget,它会将它下载到我的代码库中。链接的文档是这样说的:obj.get(response_target: './my-code/my-item.txt')。这就是将项目放入我的代码存储库中。 【参考方案1】:

如果将配置更改为attachment浏览器下载文件?

这可能与 content-disposition 内联值有关。

你检查过这个问题吗? https://superuser.com/questions/1277819/why-does-chrome-sometimes-download-a-pdf-instead-of-opening-it

【讨论】:

请不要在回答中提问;而是在评论中询问。答案不应该激发对话,而是提供解决方案。此外,如果您怀疑解决方案在另一个问题或不同的站点中,那么您应该分别将该问题标记为重复或离题。 漂亮的回答我的朋友。这是我第一次完全使用 S3……我遵循了一些指南,但想远离客户。现在效果很好。附加工作代码以回答。

以上是关于如何使用 AWS 开发工具包从 S3 下载对象 - RESTful的主要内容,如果未能解决你的问题,请参考以下文章

如何使用适用于 Node.js 的 AWS 开发工具包将 Amazon S3 中的所有对象从一个前缀复制/移动到另一个前缀

如何使用AWS SDK从S3下载对象--RESTful。

如何使用AWS SDK从S3下载对象--RESTful。

使用 AWS Java 开发工具包为现有 S3 对象设置 Expires 标头

通过 AWS 开发工具包创建签名的 S3 和 Cloudfront URL

AWS 从 S3 下载对象时出错,“配置文件不能为空”