13

Ruby on Railsでペーパークリップを使用してアセットをモデルにアタッチしています。これらのアセットは任意のファイルタイプにすることができ、現在サムネイルはアセットが画像の場合にのみ生成されます。アップロード時にファイルのサムネイルを生成するか、default_urlで何かを設定することで、他のファイルに別のデフォルトの画像を表示できるようにしたいのですが、これまでのところ、これに役立つリソースが見つかりません。自分ではどこにも行きません。

私のモデルは次のとおりです。

  class Asset < ActiveRecord::Base  
    has_attached_file :media,  
    :storage => :s3,  
    :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",  
    :path => ":attachment/:id/:style.:extension",  
    :bucket => S3_BUCKET,  
    :styles => {:thumb => "75x75>", :large => "600x800>",  
    :whiny => false,  
    :default_url => "/images/:attachment/missing.jpg"  

生成が失敗した場合、またはデフォルトのURLの:content_typeのようなものにフォールバックする場合に、カスタムサムネイルを生成するためのリソースを持っている人はいますか?ソースを調べましたが、どこにもアクセスできませんでした。

ありがとう!

4

2 に答える 2

17

私は実際にこれとまったく同じ機能を実装しました。Paperclip はすべての画像と PDF のサムネイルを生成し、MS Word、Excel、HTML、TXT ファイルなどのカスタム サムネイル アイコンを追加しました。

私の解決策はかなり簡単です。私のモデルAttachment(あなたの場合Asset)では、次のメソッドを定義しました:

def thumbnail_uri(style = :original)
  if style == :original || has_thumbnail?
    attachment.s3.interface.get_link(attachment.s3_bucket.to_s, attachment.path(style), EXPIRES_AFTER)
  else
    generic_icon_path style
  end
end

これは、S3 に保存されているサムネイルへの URL、またはアセットのコンテンツ タイプに基づく汎用 PNG アイコンへのローカル パスのいずれかを返します (以下で説明します)。このhas_thumbnail?メソッドは、このアセットのサムネイルが生成されているかどうかを判断します。これは、Paperclip の独自のフォークに追加したものですが、独自のロジックに置き換えることができます (パスを定義済みの「欠落」パスと比較するか、パスを比較する「標準的な」方法がわからない場合もあります)。コンテンツ タイプをデフォルト リスト ["image/jpeg"、"image/png"] などと比較するだけです)。

とにかく、サムネイルスタイル(この場合は :thumb と :large )とコンテンツタイプの両方に基づいて、パスを汎用アイコンに戻すメソッドを次に示します。

# Generates a path to the thumbnail image for the given content type 
# and image size.
#
# e.g. a :small thumbnail with a content type of text/html, the file name 
#      would have the filename icon.small.text.html.png
#
# If no such thumbnail can be found a generic one is returned
def generic_icon_path(style = image.default_style)
  url = "/images/attachments/icon.#{style.to_s}.#{attachment_content_type.sub('/', '.')}.png"
  if File.exists? "#{RAILS_ROOT}/public/#{url}"
    url
  else
    "/images/attachments/icon.#{style.to_s}.default.png"
  end
end

次に、新しいサムネイルを追加するには、PNG ファイルを/images/attachments/正しいファイル名規則で追加します。私のサムネイル スタイルは :small と呼ばれ、Word、Excel、およびプレーン テキストのスタイルを定義しているので、現時点では次のようになっています。

icon.small.application.msword.png
icon.small.text.plain.png
icon.small.application.vnd.ms-excel.png
icon.small.application.vnd.openxmlformats-officedocument.spreadsheetml.sheet.png
icon.small.application.vnd.openxmlformats-officedocument.wordprocessingml.document.png

コンテンツ タイプがサポートされていない場合は、一般的な「すべてをキャッチ」アイコンが表示されます。

icon.small.default.png
于 2009-07-30T23:00:47.010 に答える
0

ビデオなど、一部のファイルタイプをアセットから継承し、別のファイルタイプを指定することができます。

has_attached_file:media、...、:style => {....}

ビデオサムネイルについては、このチュートリアルをご覧ください。

于 2009-07-30T21:12:39.740 に答える