1

我使用 rails 2.3 应用程序中的回形针 gem 将图像附件保存到 AWS S3。我希望能够允许用户下载图像附件作为实际下载,而不是打开新的浏览器选项卡。当我在我使用的服务器上本地保存图像附件时:

picture_filename = RAILS_ROOT + '/public' + params[:picture_filename]
send_file(picture_filename, :type => 'text', :stream => "false", :disposition => 'attachment')

但是,如果位置在 aws-s3 上,则 send_file 不起作用。

这是如何使用 aws-sdk gem 实现的?

4

1 回答 1

7

如果您在回形针模型上正确设置了 s3 配置

has_attached_file :picture,
:storage => :s3,
:url => ":s3_domain_url",
:s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
:path => "picture/:id/:filename"

然后在你的控制器动作中应该能够像

@pic = Picture.find(1)

send_file(@pic.picture.to_file, :type => @pic.picture_content_type, :disposition => "attachment", :filename => @pic.picture_file_name)

这应该得到正确的 aws s3 路径。请注意,.to_file这在回形针的较新版本中已被删除,但如果您使用的是 rails 2.3,您可能有较早的版本。

我目前正在使用它来使用 rails 3.2+ 和回形针 3.0+ 下载

send_file(Paperclip.io_adapters.for(@pic.picture).path, :type => @pic.picture_content_type, :disposition => "attachment", :filename => @pic.picture_file_name)
于 2013-10-09T01:36:44.350 回答