3

大量の写真を返すプロジェクトでDragonflyを使用しており、URLを最適化しようとしていました。現在、次のような画像のURLを取得しています。

http:// localhostを:3000 /メディア/ BAhbCFsHOgZmSSJgZmRlL2ZkZTAxYzQ0LTM4Y2UtNGU0ZS1iOWRlLWUwZmUxNWUwN2JmMC83Mzk1NmZlMC05ZTA5LTQzNWUtODUyMC00MzFlYzQxMzQ1OTQvb3JpZ2luYWwuanBlZwY6BkVUWwg6BnA6CnRodW1iSSIMMjQweDI0MAY7BkZbCTsHOgxjb252ZXJ0SSIQLXF1YWxpdHkgODAGOwZGMA / 240x240.jpg

これは256バイトを超えています。私は次のようなものが欲しいです:

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

それは以下に準拠しています:

/media/:id/:format

:formatDragonflyとRailsを使用して、一連の操作にマップし: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各画像がになります(ただし、それ以外の場合は正常に機能します)。これをレンダリングとして処理することは可能ですか、それとも内部リダイレクトを行うことはできますか(つまり、クライアントが重複した要求を行う必要はありません)?

4

2 に答える 2

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])
}

またはそのようなもの(上記のコードを試していませんが、それらの線に沿ったものになるでしょう)

于 2011-08-18T23:00:15.143 に答える
1

クライアントがダウンロード可能なPDF用の短いURLを必要とする同様の状況に遭遇しました。

マークの答えに基づいて、トンボのドキュメントを見て、私はこれを思いついた:

#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
}

質問に対する直接の答えではありませんが、トンボのURLを短縮する方法を探している人を助けることができるかもしれません

于 2016-07-25T14:10:13.877 に答える