Buscamos en todo el mundo online y así tenerte la solución para tu duda, si continúas con dificultades puedes dejarnos tu inquietud y te responderemos porque estamos para ayudarte.
Solución:
Yo usaría la gema rubyzip. Específicamente esta parte: https://github.com/rubyzip/rubyzip/blob/master/lib/zip/filesystem.rb
Crea un sistema de archivos artificial en la memoria que refleja el contenido del archivo zip. Aquí hay un ejemplo basado en el ejemplo de los documentos:
Rubyzip interface changed!!! No need to do require "zip/zip" and Zip prefix in class names removed.
require 'zip'
Zip::File.open("my.zip") do |zipfile|
zipfile.each do |file|
# do something with file
end
end
En su caso, simplemente ponga el nombre del archivo temporal cargado donde my.zip
está en el ejemplo, y puede recorrer los contenidos y realizar sus operaciones habituales en ellos.
Desde la página del proyecto RubyZip:
¡La interfaz de Rubyzip cambió! No es necesario solicitar “zip/zip” y Zip prefix en los nombres de clase eliminados.
Entonces, el código de ejemplo de @ben-lee debe actualizarse a algo como esto:
require 'zip'
Zip::File.open("my.zip") do |zipfile|
zipfile.each do |file|
# do something with file
end
end
Extraer archivos Zip en Ruby
Una vez que haya instalado el rubyzip
gema, puede usar este método para extraer archivos zip:
require 'zip'
def extract_zip(file, destination)
FileUtils.mkdir_p(destination)
Zip::File.open(file) do |zip_file|
zip_file.each do |f|
fpath = File.join(destination, f.name)
zip_file.extract(f, fpath) unless File.exist?(fpath)
end
end
end
Lo usas así:
extract_zip(zip_path, extract_destination)
Si para ti ha sido provechoso nuestro post, te agradeceríamos que lo compartas con más seniors de esta manera nos ayudas a extender esta información.