سؤال

وأنا باستخدام مشبك مع روبي على القضبان إرفاق الأصول إلى نموذج، يمكن لهذه الأصول أن يكون أي نوع الملف، وحاليا هي فقط التي يتم توليدها الصور المصغرة إذا كان الأصل هو صورة. أود أن تكون قادرة على عرض صورة افتراضية مختلفة عن الملفات الأخرى، سواء عن طريق توليد صورة مصغرة من الملفات على تحميل، أو وضع شيء ما مع 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"  

هل لديها أي موارد لتوليد الصور المصغرة المخصصة في حال فشل جيل، أو يرتد على شيء من هذا القبيل: CONTENT_TYPE في عنوان الموقع الافتراضي؟ لقد بدا من خلال مصدر ولم تكن قادرا على الحصول على أي مكان.

وشكرا!

هل كانت مفيدة؟

المحلول

ولقد نفذت في الواقع هذه الميزة ذاتها. مشبك يولد مصغرات لكل ما عندي من الصور وملفات 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

وهذا يعود إما URL لصورة مصغرة المخزنة على S3، أو مسار محلي إلى رمز PNG عام على أساس الأصول نوع المحتوى (مبين أدناه). يحدد طريقة has_thumbnail? ما إذا كانت هذه الأصول تمت زيارتها صورة مصغرة ولدت لذلك. هذا شيء أنا وأضاف في بلدي شوكة الخاصة من مشبك الورق، ولكن هل يمكن أن تكون بديلا في المنطق الخاص بك (لست متأكدا من الطريقة "القياسية" لتحديد ذلك، ربما مقارنة المسار مع المسار المحدد 'مفقود'، أو حتى مجرد مقارنة نوع المحتوى إلى قائمة الافتراضي [ "صورة / الحياة السياسية في فرنسا"، "صورة / بابوا نيو غينيا"] الخ).

وعلى أي حال، وهنا الطريقة التي يمر الظهر مسار إلى رمز عام على أساس كل من أسلوب مصغرة (في الحالة الخاصة بك: الإبهام و: كبير) ونوع المحتوى:

# 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/ مع اتفاقية اسم الملف الصحيح. ويسمى أسلوبي الصورة المصغرة: صغيرة وأنا قد حددت أنماط لل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

نصائح أخرى

هل يمكن أن يكون بعض أنواع الملفات ترث من الأصول الخاصة بك، على سبيل المثال فيديو وتحديد مختلفة:

وhas_attached_file: وسائل الإعلام، ...،: أسلوب => {....}

وإلقاء نظرة على هذا البرنامج التعليمي ل الصور المصغرة الفيديو .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top