我在一个项目中使用蜻蜓,该项目返回大量照片流,并正在寻找优化的网址。我现在得到的图片网址如下:
http://localhost:3000/media/BAhbCFsHOgZmSSJgZmRlL2ZkZTAxYzQ0LTM4Y2UtNGU0ZS1iOWRlLWUwZmUxNWUwN2JmMC83Mzk1NmZlMC05ZTA5LTQzNWUtODUyMC00MzFlYzQxMzQ1OTQvb3JpZ2luYWwuanBlZwY6BkVUWwg6BnA6CnRodW1iSSIMMjQweDI0MAY7BkZbCTsHOgxjb252ZXJ0SSIQLXF1YWxpdHkgODAGOwZGMA/240x240.jpg
超过256字节。我想要一些像:
http://localhost:3000/media/1024/240x240_medium.jpg
符合:
/media/:id/:format
当使用蜻蜓和Rails时,我如何添加这个,以便
:format
映射到一个操作链,并使用:id
查找模型或图像?谢谢!编辑:
我为所需的每种格式添加了custom
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
(但在其他情况下可以正常工作)。是否可以将此处理为呈现或以某种方式进行内部重定向(即不要求客户端发出重复请求)? 最佳答案
您不需要使用控制器操作-您可以使用蜻蜓端点-请参见http://markevans.github.com/dragonfly/file.URLs.html#Routed_Endpoints
例如
match '/photos/:id/:style.:format' => Dragonfly[:images].endpoint { |params, app|
Photo.find(params[:id]).image.thumb(params[:style]).encode(params[:format])
}
或者类似的东西
(还没有尝试过上面的代码,但会有一些类似的东西)