2016-07-29 6 views
1

Meine Uploader DateiCarrierwave Verwirft Meta Data On Hochladen

# encoding: utf-8 

class EngagementUploader < CarrierWave::Uploader::Base 

    # Include RMagick or MiniMagick support: 
    include CarrierWave::RMagick 
    include CarrierWave::Processing::RMagick 
    # include CarrierWave::MiniMagick 
    include CarrierWave::ImageOptimizer 

    # Choose what kind of storage to use for this uploader: 
    # storage :file 
    storage :fog 

    # Override the directory where uploaded files will be stored. 
    # This is a sensible default for uploaders that are meant to be mounted: #{model.name.to_s.underscore} 
    def store_dir 
    "#{model.class.to_s.pluralize.parameterize}/#{model.id}/" 
    end 

    process :optimize => [{ quality: 90 }] 

    #process :watermark 

    #process :blur => [0, 8] 

    # Provide a default URL as a default if there hasn't been a file uploaded: 
    # def default_url 
    # # For Rails 3.1+ asset pipeline compatibility: 
    # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) 
    # 
    # "/images/fallback/" + [version_name, "default.png"].compact.join('_') 
    # end 

    # Process files as they are uploaded: 
    # process :scale => [200, 300] 
    # 
    # def scale(width, height) 
    # # do something 
    # end 

    # Create different versions of your uploaded files: 
    # version :thumb do 
    # process :resize_to_fit => [50, 50] 
    # end 
    # version :large do 
    # process :resize_to_fill => [512, 512] 
    # end 
    # version :medium do 
    # process :resize_to_fill => [128, 128] 
    # end 
    # version :small do 
    # process :resize_to_fill => [48, 48] 
    # end 
    # version :tiny do 
    # process :resize_to_fill => [32, 32] 
    # end 

    # Add a white list of extensions which are allowed to be uploaded. 
    # For images you might use something like this: 
    def extension_white_list 
    %w(jpg jpeg gif png) 
    end 

    # Override the filename of the uploaded files: 
    # Avoid using model.id or version_name here, see uploader/store.rb for details. 
    # def filename 
    # "something.jpg" if original_filename 
    # end 

    def filename 
    if original_filename 
     "post-#{secure_token(16)}.#{file.extension}" 
    end 
    end 

    protected 
    def secure_token(length=16) 
    var = :"@#{mounted_as}_secure_token" 
    model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.hex(length/2)) 
    end 

    # def watermark 
    # manipulate! do |img| 
    #  logo = Magick::Image.read("#{Rails.root}/app/assets/images/watermark.png").first 
    #  img = img.composite(logo, Magick::SouthEastGravity, 15, 15, Magick::OverCompositeOp) 
    # end 
    # end 

end 

Ich lade ein 360 Bild und wenn ich versuche, die Meta von der uploade zu lesen Datei alles verloren ist. Gibt es eine Möglichkeit, es beim Hochladen zu erhalten?

Antwort

1

Eine zufällige Suche gibt das Gem Carrierwave-meta zurück. Grundsätzlich legen zum gemfile:

gem 'carrierwave-meta' 

und dann bundle install laufen. Dann fügen Sie die store_meta Option zu Ihrem Uploader:

class TestUploader < CarrierWave::Uploader::Base 

    include CarrierWave::RMagick 
    include CarrierWave::Meta 

    process :store_meta => [{md5sum: true}] 
    version :version do 
    process :resize_to_fill => [200, 200] 
    process :store_meta 
    end 
end 

file = File.open('test.jpg') # JPEG 500x300, 20000 bytes 
uploader = TestUploader.new 
uploader.store!(file) 

uploader.width  # 500 
uploader.height  # 300 
uploader.image_size # [500, 300] 

Natürlich müssen Sie sicherstellen, dass Ihr Modell, um die Werte speichern:

class TestModel 
    attr_accessor :image_width 
    attr_accessor :image_height 
    attr_accessor :image_image_size 
    attr_accessor :image_content_type 
    attr_accessor :image_file_size 
    attr_accessor :image_md5sum 

    attr_accessor :image_version_width 
    attr_accessor :image_version_height 
    attr_accessor :image_version_image_size 
    attr_accessor :image_version_content_type 
    attr_accessor :image_version_file_size 
    attr_accessor :image_version_md5sum 
end 
+0

ich brauche nicht die Meta-Daten selbst. Es muss in Meta-Tags innerhalb des Bildes eingebettet sein, damit es von Facebook erkannt wird. –

+0

Ah, ich habe es falsch verstanden. Das kann ich dir wirklich nicht sagen. –

Verwandte Themen