2011-08-18 100 views
3

我在一個項目中使用了蜻蜓,該項目返回大量照片並希望優化網址。目前我得到的圖像的URL,如:蜻蜓和短網址

http://localhost:3000/media/BAhbCFsHOgZmSSJgZmRlL2ZkZTAxYzQ0LTM4Y2UtNGU0ZS1iOWRlLWUwZmUxNWUwN2JmMC83Mzk1NmZlMC05ZTA5LTQzNWUtODUyMC00MzFlYzQxMzQ1OTQvb3JpZ2luYWwuanBlZwY6BkVUWwg6BnA6CnRodW1iSSIMMjQweDI0MAY7BkZbCTsHOgxjb252ZXJ0SSIQLXF1YWxpdHkgODAGOwZGMA/240x240.jpg

這是超過256個字節。我想是這樣的:

http://localhost:3000/media/1024/240x240_medium.jpg

即符合:

/media/:id/:format 

我怎麼會去加入這個使用蜻蜓和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爲每個圖像(但在其他方面工作正常)。是否有可能將其作爲渲染進行處理,或者以某種方式進行內部重定向(即不要求客戶端進行重複請求)?

回答

8

你不應該需要使用控制器動作 - 你可以用一隻蜻蜓終點 - 見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]) 
} 

或類似的東西 (沒試過上面的代碼,但它會沿着這些線路的東西)

1

我碰到了類似的情況,其中客戶端需要一個短網址可下載的pdfs。

大廈馬克的回答來看,在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 
} 

這不是一個直接的問題的答案,但也許它仍然可以幫助別人尋找一種方式來縮短網址蜻蜓