2010-08-16 2 views
0

Мне нужно разрешить многократную загрузку небольших документов в Rails, желательно с помощью Paperclip (я уже использовал его для включения загрузки).Массовая загрузка из Rails (возможно, с помощью Paperclip)

Специфические потребности:

  • Zip файлы для скачивания.
  • Загрузите различные типы файлов вместе (.jpeg, .doc, docx, .pdf).

Я нашел много учебников онлайн для множественной загрузки, но не для загрузки. Я ценю вашу помощь. Благодаря!

ответ

3

Определить download действие на контроллере, которое должно обрабатывать загрузку. Метод может выглядеть следующим образом: (Учитывая File модели с приставкой скрепки под названием attached)

def download 
    require 'zip/zip' 
    require 'zip/zipfilesystem' 
    @files = File.all 

    t = Tempfile.new('tmp-zip-' + request.remote_ip) 
    Zip::ZipOutputStream.open(t.path) do |zos| 
    @files.each do |file| 
     zos.put_next_entry(file.attached_file_name) 
     zos.print IO.read(file.attached.path) 
    end 
    end 

    send_file t.path, :type => "application/zip", :filename => "Awesome.zip" 

    t.close 
end 
3

Добавить в Gemfile gem 'rubyzip'.

#foo model 
    ... 
    has_many :uploads 
    ... 

#foo controller 
def download 
    @foo = Foo.find(params[:id]) 
    unless @foo.uploads.empty? 
    send_file Upload.zip(@foo), 
     :type => 'application/zip', 
     :disposition => 'attachment', 
     :filename => "Foo-#{@foo.id}.zip" 
    end 
end 

#Upload model 
def self.zip foo 
    archive = File.join("public", "files", foo.id.to_s, foo.id.to_s) +".zip" 
    unless File.exist? archive 
    files = foo.uploads.all 
    Zip::ZipFile.open(archive, 'w') do |zip_file| 
     files.each do |foo_file| 
     zip_file.add(foo_file.upload_file_name,foo_file.upload.path) 
     end 
    end 
    end 
    archive 
end 
Смежные вопросы