我在 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/