2016-08-02 1 views
1

나는 다음과 같은 컨트롤러 액션을 만들 RubyZIP을 사용하고 있습니다 :RubyZIP을 사용하여 기존 파일을 ZIP 파일에 추가하는 방법은 무엇입니까? 내 레일 4.2 응용 프로그램에서

class SomeController < ApplicationController 

    def some_action 
    file_stream = Zip::ZipOutputStream.write_buffer do |zip| 
     zip.put_next_entry "dir1/hello.txt" 
     zip.print "Hello" 
     zip.put_next_entry "dir2/hello.txt" 
     zip.print "World" 
    end 
    file_stream.rewind 
    respond_to do |format| 
     format.zip do 
     send_data file_stream.read, filename: "zip_file.zip" 
     end 
    end 
    end 

end 

을 예에서 두 개의 파일을 동적으로 생성하고 ZIP 파일로 다음에 기록 저장됩니다.

하지만 이미 존재하는 파일 (!)을 ZIP 파일에도 어떻게 추가 할 수 있습니까? 예 : 내 /app/assets/documents 폴더의 PDF 파일?

달성하기가 훨씬 쉬울 것이지만 문서를 찾을 수는 없습니다.

도움 주셔서 감사합니다. 여기

+1

'zip.put_next_entry "filename"할 수 있습니까? zip << File.binread ("file/path/and/filename")'? – matt

+0

그게 효과가! 고마워, @matt! – Tintin81

답변

2
zip_file = File.new(zip_file_path, 'w') 

Zip::File.open(zip_file.path, Zip::File::Create) do |zip| 
    zip.add(file_name, file_path) 
end 

zip_file 

, FILE_NAME 및 FILE_PATH 이름과 당신의 zip 파일 및 zip_file_path에 추가 할 파일의 경로가 ZipFile에의 경로입니다. 희망이 도움이됩니다!

+0

감사합니다. 이것은 실제로 작동했지만 내 경우에는 필요하지 않은 디스크에 파일을 생성합니다. – Tintin81

관련 문제