rubyrubyzip

rubyzip: open zip, modify it temporary, send to client


i want to temporary modify a zip file and send the changed file to the client.

right now i create a file stream and send it:

  require 'zip'
  zip_stream = Zip::OutputStream.write_buffer do |zip|
    zip.put_next_entry 'new_folder/file'
    zip.print "some text"
  end

  zip_stream.rewind
  send_data zip_stream.read, type: 'application/zip', disposition: 'attachment', filename: 'thing.zip'

i dont get how i can open a existing zip in the filesystem and put additional file in it and send it without saving it do the disk.

can you give me a hint?


Solution

  • in the end i did it like this:

    require 'zip'
    zip_stream = Zip::OutputStream.write_buffer do |new_zip|
    
     existing_zip = Zip::File.open('existing.zip')
     existing_zip.entries.each do |e|
       new_zip.put_next_entry(e.name)
       new_zip.write e.get_input_stream.read
     end
    
     new_zip.put_next_entry 'new_file'
     new_zip.print "text"
    end