2013-04-11 10 views
6

Ho questo codice, che scrive un file zip su disco, lo legge di nuovo, arrivi agli S3, quindi elimina il file:Rubyzip: Esporta il file zip direttamente su S3 senza scrivere tmpfile su disco?

compressed_file = some_temp_path 

Zip::ZipOutputStream.open(compressed_file) do |zos| 
    some_file_list.each do |file| 
    zos.put_next_entry(file.some_title) 
    zos.print IO.read(file.path) 
    end 
end # Write zip file 

s3 = Aws::S3.new(S3_KEY, S3_SECRET) 
bucket = Aws::S3::Bucket.create(s3, S3_BUCKET) 
bucket.put("#{BUCKET_PATH}/archive.zip", IO.read(compressed_file), {}, 'authenticated-read') 

File.delete(compressed_file) 

Questo codice funziona già, ma quello che voglio è quello di non creare la zip file, per salvare alcuni passaggi. Mi chiedevo se c'è un modo per esportare i dati zipfile direttamente su s3 senza dover prima creare un file tmp, leggerlo di nuovo, quindi cancellarlo?

risposta

8

Penso di aver appena trovato la risposta alla mia domanda.

È Zip::ZipOutputStream.write_buffer. Lo verificherò e aggiornerò questa risposta quando funzionerò.

Aggiornamento

funziona. Il mio codice è come questo ora:

compressed_filestream = Zip::ZipOutputStream.write_buffer do |zos| 
    some_file_list.each do |file| 
    zos.put_next_entry(file.some_title) 
    zos.print IO.read(file.path) 
    end 
end # Outputs zipfile as StringIO 

s3 = Aws::S3.new(S3_KEY, S3_SECRET) 
bucket = Aws::S3::Bucket.create(s3, S3_BUCKET) 

compressed_filestream.rewind 
bucket.put("#{BUCKET_PATH}/archive.zip", compressed_filestream.read, {}, 'authenticated-read') 

Le write_buffer restituisce un StringIO e ha bisogno di rewind torrente prima di read ing esso. Ora non ho bisogno di creare ed eliminare il file tmp.

Mi chiedo ora se write_buffer sarebbe più estesa o più pesante della memoria di open? O è il contrario?

+0

Che cos'è 'some_file_list'? – Trip

+0

Sto immaginando qualcosa di simile a "some_file_list = Zip :: ZipFile.open (zip_file)" – Trip

+0

Potrebbe essere. Per me, stavo leggendo i miei file da S3. – index

Problemi correlati