Vamos dizer que alguém em seu site irá carregar pacotes zip e você precisa ler este pacote usando quaisquer regras e salvá-lo na nuvem, deve ser fácil de fazer usando o modelo de ativo e um adaptador especial para clipe de papel.
No seu trabalhador ou antes do filtro você pode fazer algo assim para ler o pacote.
Zip::ZipFile.foreach(file).map do |entry|
if entry.file?
model_container.assets.create(item: entry) # or build
end
end
Coloque este arquivo na pasta lib e solicite para o modelo que usará o adaptador (para mim é um modelo de ativo).
require 'weakref'
module Paperclip
class ZipEntryAdapter < StringioAdapter
def initialize(target)
target.instance_eval do
def original_filename
to_s
end
end
super(target)
end
def copy_to_tempfile(src)
content = WeakRef.new(src.get_input_stream.read)
destination.write(content)
destination.rewind
# cleanup memory that we spent for reading zip entry.
GC.start
destination
end
end
end
Paperclip.io_adapters.register Paperclip::ZipEntryAdapter do |target|
Zip::ZipEntry === target
end