下载用paperclip gem保存的aws-s3附件

时间:2013-10-09 00:27:55

标签: ruby-on-rails amazon-web-services paperclip

我使用我的rails 2.3应用程序中的paperclip 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实现这一目标?

1 个答案:

答案 0 :(得分: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路径。请注意{> 1}}在更高版本的回形针中删除了.to_file,但如果您使用的是rails 2.3,则可能是早期版本。

我目前正在使用rails 3.2+和paperclip 3.0 +

进行下载
send_file(Paperclip.io_adapters.for(@pic.picture).path, :type => @pic.picture_content_type, :disposition => "attachment", :filename => @pic.picture_file_name)