Frage

Ich bin mit Büroklammer mit Ruby on Rails Vermögenswerte zu einem Modell zu befestigen, können diese Vermögenswerte jeder Dateityp sein und zur Zeit Thumbnails werden nur dann erzeugt wird, wenn der Vermögenswert ein Bild ist. Ich möchte in der Lage sein, eine andere Standardbild für andere Dateien angezeigt werden, entweder durch eine Miniaturansicht der Dateien beim Hochladen zu erzeugen, oder etwas nach oben mit der DEFAULT_URL Einstellung, aber bisher kann ich keine Ressourcen mit diesem zu helfen und keine wo auf meiner eigenen bin immer.

Mein Modell ist wie folgt:

  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"  

Hat jemand irgendwelche Ressourcen zur Erstellung von benutzerdefinierten Thumbnails, wenn die Generierung fehlschlägt oder fällt zurück auf so etwas wie: content_type in der Standard-URL? Ich habe durch die Quelle sehe und nicht in der Lage, überall zu bekommen.

Danke!

War es hilfreich?

Lösung

Ich habe diese sehr gleiche Funktion tatsächlich umgesetzt. Büroklammer erzeugt Thumbnails für alle meine Bilder und PDF-Dateien, und ich habe benutzerdefinierte Miniatursymbole für MS Word, Excel, HTML, TXT-Dateien usw. hinzugefügt.

Meine Lösung ist recht einfach. In meinem Modell Attachment (in Ihrem Fall Asset) Ich habe die folgende Methode definiert:

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

Dies gibt entweder eine URL zu einer Miniaturansicht auf S3 gespeichert, oder einen lokalen Pfad zu einem Symbol generic PNG basierend auf dem Aktivinhaltstyp (siehe unten). Die has_thumbnail? Verfahren bestimmt, ob oder nicht diese Anlage ein Miniaturbild für sich erzeugt hat. Dies ist etwas, das ich in meiner eigenen Gabel von Paperclip hinzugefügt, aber Sie können in Ihrer eigenen Logik (Ich bin nicht sicher, ob die ‚Standard‘ Art und Weise zu bestimmen, diese, vielleicht einen Vergleich den Pfades mit definierten ‚fehlenden‘ Pfad ersetzen oder sogar nur den Inhaltstyp auf eine Standardliste zu vergleichen [ "image / jpeg", "image / png"] usw.).

Wie auch immer, hier ist die Methode, die einen Pfad zu einem allgemeinen Symbol sowohl auf den Miniaturstil (in Ihrem Fall: Daumen und: groß) auf Basis geht zurück und die Art des Inhalts:

# 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

Dann ein neues Thumbnail hinzufügen ich gerade PNG-Dateien in /images/attachments/ mit der richtigen Dateinamenkonvention hinzuzufügen. Mein Mini-Ansicht Stil heißt: klein und ich habe Stile für Word, Excel und Klartext definiert so in der heutigen Zeit die ich habe:

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

Wenn der Inhaltstyp nicht unterstützt wird, gibt es eine allgemeine ‚catch all‘ Symbol, das angezeigt wird:

icon.small.default.png

Andere Tipps

könnten Sie haben einige Dateitypen von Ihrem Asset erben, z.B. Video und geben Sie eine andere:

has_attached_file: Medien, ...,: style => {....}

Haben Sie einen Blick auf dieses Tutorial für Video-Thumbnails .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top