2013-12-18 5 views
2

Я пытаюсь получить размер файла загрузки несущей. Я пытаюсь делать такие вещи, как:Получение размера загружаемого носителя несущей

<%= upload.file.size %> 

и

<%= upload.file_size %> 

и ни работаю. Я также запускал: методы загрузки и не видел ничего там, что привело бы меня к размеру файла загрузки. Как получить размер файла для загрузки?

ответ

0

К сожалению, оператор-носитель не предоставляет способ определения размера загружаемого файла после его сохранения (поскольку он не знает его, и только способ сделать это - это повторно получить доступ к файлу и проверить его размер файла). Вы можете пойти с двумя различными сценариями здесь:

  1. Создать помощник, который будет извлекать файл из хранилища и определить размер его (который может быть сложен, и я лично не буду идти по этому пути).

  2. Запишите размер файла, когда он будет загружен и сохранить его как атрибут вашей модели (есть руководство in Carrierwave wiki описывает, как сделать это.

9

Вот ответ. CarrierWave не в частности, дать ее вам так что вы должны сделать хорошую работу вокруг:

number_to_human_size(object.attachment.file.size) 
2

/app/uploaders/attachment_file_uploader.rb

class AttachmentFileUploader < CarrierWave::Uploader::Base 
    include CarrierWave::MimeTypes 
    include ActionView::Helpers::NumberHelper 

    storage :file 

    process :set_content_type 
    process :store_file_attributes 

    .... 

    private 

    def store_file_attributes 
    if file && model 
     model.file_name = File.basename(file.file) 
     model.file_size = File.size(file.file) 
     model.human_size = number_to_human_size(model.file_size) 
    end 
    end 

end 

миграция:

class CreateAttachments < ActiveRecord::Migration 

    def change 
    create_table :attachments do |t| 
     t.references :attachable, polymorphic: true 
     t.string  :file 
     t.string  :file_name 
     t.integer :file_size 
     t.string  :human_size 
     t.string  :description 

     t.timestamps null: false 
    end 
    end 

end 
0

Это путь поздно, но я думал, что я хотел бы добавить для будущих зрителей.

Перейдите по ссылке, если вы хотите использовать с RMagick и MiniMagick

«Если вы назначаете размеры модели (что вы смонтировали добавивший) в пользовательском процессоре, который будет сохранен вместе с путь изображения при загрузке ».

https://github.com/carrierwaveuploader/carrierwave/wiki/How-to%3A-Get-image-dimensions

class ImageUploader < CarrierWave::Uploader::Base 
    process :store_dimensions 

    # If you like, you can call this inside a version like this 
    # instead of at the top level. 
    # That will store the dimensions for this version. 
    version :show do 
    process :resize_to_limit => [500, 500] 
    process :store_dimensions 
    end 

    private 

    def store_dimensions 
    if file && model 
     model.width, model.height = `identify -format "%wx%h" #{file.path}`.split(/x/) 
    end 
    end 
end 
Смежные вопросы