我正在尝试将Paperclip与Heroku一起使用。是的,根据Heroku's Application Constraints。我只能将上传的文件存储到/ tmp或/.log文件夹中,该文件夹完全位于/ public文件夹之外。
如果我们不打算讨论Amazon S3 ,如何使用 image_tag 标记访问/ tmp目录中的图像。
这是我的照片模型,使用Paperclip
class ObbProductphoto < ActiveRecord::Base
belongs_to :product
has_attached_file :photo, :styles => {:high => '1024x768', :medium => '640x480', :thumb => '100x100'},
:path => "tmp/:id.:extension",
:url => "tmp/:id.:extension"
end
这就是我在浏览器中得到的:
<img src="/images/tmp/24.JPG?1294433924" alt="24" />
它仍然使用/ images文件夹,
我试图破解任何 / .. 或 ../ ,无法获得解决方案。
谢谢你们, Suebphatt
答案 0 :(得分:2)
假设可以将文件放在比/ tmp更永久的位置,可以使用:url和:path参数存储和访问public
目录之外的上传文件,以及一点配置工作。
从我最近编写的代码中提取的一个示例(如果你逐字复制,它已被修改得足以使它可能无法工作):
app/models/picture.rb
# Define the attachment
has_attached_file :image,
:styles => {:large => ["700", :jpg],
:thumb => ["100x100>", :gif]},
:url => "/asset/picture/:id/:style/:basename.:extension",
:path => ":base/picture/:id/:style/:basename.:extension"
config/initializers/storage.rb
# Configure common attachment storage
# This approach allows more flexibility in defining, and potentially moving,
# a common storage root for multiple models. If unneeded, just replace
# :base in the :path parameter with the actual path
Paperclip.interpolates :base do |attachment, style|
/path/to/persistent/storage
# A relative path from the Rails.root directory should work as well
end
app/controllers/pictures_controller.rb
# Make the attachment accessible
def asset
instance = Picture.find(params[:id])
params[:style].gsub!(/\.\./, '')
#check permissions before delivering asset?
send_file instance.image.path(params[:style].intern),
:type => instance.image_content_type,
:disposition => 'inline'
end
config/routes.rb
# Add the necessary route
match '/asset/picture/:id/:style/:basename.:extension', :to => 'pictures#asset'
app/views/pictures/show.html.erb
<% # Display the picture %>
<%= image_tag picture.image.url(:large) %>
注意这是所有Rails 3语法。在Rails 2.x中使用它需要进行一些更改,但希望你能得到这个,嗯,图片。
答案 1 :(得分:0)
据我所知,你不能 - /tmp
没有被配置为可以提供项目的东西(它用于临时存储)。
您可以通过浏览器中的/tmp
网址访问图片吗?他们有用吗?