我在一个项目中使用Dragonfly,该项目返回大量照片并希望优化网址。我目前正在获取图像网址,如:
超过256个字节。我喜欢这样的东西:
http://localhost:3000/media/1024/240x240_medium.jpg
这符合:
/media/:id/:format
如何在使用Dragonfly和Rails时添加此项,以便:format
映射到一系列操作,:id
用于查找模型或图像?谢谢!
修改
我已为我需要的每种格式添加了自定义Mime::Type
,并具有以下功能:
# config/routes.rb
match "/photos/:id/:style", to: "photos#show", as: :media
# app/controllers/photos_controller.rb
def show
@photo = Photo.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.jpg { cache('public', 86400); redirect_to @photo.url(params[:style], 'jpg') }
format.png { cache('public', 86400); redirect_to @photo.url(params[:style], 'png') }
format.gif { cache('public', 86400); redirect_to @photo.url(params[:style], 'gif') }
end
end
# app/views/photos/show.html.erb
<%= image_tag media_path(id: @photo.id, style: 'small', format: 'png') %>
然而,这会导致每个图像302
(但其他方式正常)。是否可以将其作为渲染处理或以某种方式进行内部重定向(即不要求客户端发出重复请求)?
答案 0 :(得分:8)
您不需要使用控制器操作 - 您可以使用蜻蜓端点 - 请参阅http://markevans.github.com/dragonfly/file.URLs.html#Routed_Endpoints
e.g。
match '/photos/:id/:style.:format' => Dragonfly[:images].endpoint { |params, app|
Photo.find(params[:id]).image.thumb(params[:style]).encode(params[:format])
}
或类似的东西 (没有尝试过上面的代码,但它会是那些行的东西)
答案 1 :(得分:1)
我遇到过类似的情况,客户端需要一个可下载pdf的简短网址。
以Mark的答案为基础并查看dragonfly docs我想出了这个:
#file.rb
class File < ActiveRecord::Base
dragonfly_accessor :pdf
end
def pdf_link
return "/pdf/#{self.filename}.pdf"
end
#routes.rb
get '/pdf/:filename' => Dragonfly.app.endpoint { |params, app|
File.where(filename: params[:filename]).first.pdf
}
这不是问题的直接答案,但也许它仍然可以帮助某人寻找缩短蜻蜓网址的方法