ruby-on-rails - rails : allow download of files stored on S3 without showing the actual S3 URL to user

标签 ruby-on-rails download amazon-s3

我在 Heroku 上托管了一个 Rails 应用程序。该应用程序在 Amazon S3 上生成和存储 PDF 文件。用户可以下载这些文件以在他们的浏览器中查看或保存在他们的计算机上。

我遇到的问题是,虽然可以通过 S3 URL(如“https://s3.amazonaws.com/my-bucket/F4D8CESSDF.pdf”)下载这些文件,但这显然不是一个好方法它。向用户暴露这么多关于后端的信息是不可取的,更不用说出现的安全问题了。

是否可以让我的应用程序以某种方式从 Controller 中的 S3 检索文件数据,然后为用户创建一个下载流,以便不公开 Amazon URL?

最佳答案

是的,这是可能的 - 只需使用 Rails 获取远程文件,然后将其临时存储在您的服务器上或直接从缓冲区发送。这样做的问题当然是您需要先获取文件,然后才能将其提供给用户。见 this thread为了讨论,他们的解决方案是这样的:

#environment.rb
require 'open-uri'

#controller
def index
  data = open(params[:file])
  send_data data, :filename => params[:name], ...
end

This issue is also somewhat related .

关于ruby-on-rails - rails : allow download of files stored on S3 without showing the actual S3 URL to user,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12279056/

相关文章:

java - 如何将多个S3对象异步获取到内存中

amazon-s3 - 使用从 S3 事件调用的 AWS Lambda 触发 Airflow DAG

ruby-on-rails - 如何在连接中获取两个表的结果或包含在 rails 中

ruby-on-rails - Rails 4 【最佳实践】嵌套资源和浅层 : true

c++ 复制文件\通用实现

Python:用于下载有效 .zip 文件的跨平台代码

amazon-web-services - 使用 S3 和 CloudFront 防止图像盗链

ruby-on-rails - Rails 应用程序未加载 mp3 文件以在 HTML 5 播放器中播放

ruby-on-rails - 新项目使用哪个版本的 Rails?

python - 我如何访问YouTube第一搜索结果?