我使用我的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实现这一目标?
答案 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)