Rubyzip: zipfile로 압축해서 다중 파일 다운로드 받기

Rails

Rubyzip: zipfile로 압축해서 다중 파일 다운로드 받기

preview

1. rubyzip gemfile 설치

gem 'rubyzip', '>= 1.0.0'
gem 'zip-zip'

2. zipfile 전환 코드 작성하는 페이지에 rubygems와 zip을 require 해줍니다.

require 'rubygems'
require 'zip'

3. 압축할 파일들이 있는 폴더와 해당 파일들을 묶어줄 zip 폴더를 만들어줍니다.


# 압축할 파일들이 있는 폴더 (예시)
folder = "#{Rails.root}/public/downloads"
input_filenames = ['image.jpg', 'description.txt', 'stats.csv']

#위 파일들을 묶어줄 zip 폴더를 만들어줌
zipfile_name = "#{Rails.root}/public/archive.zip"

4. 위에 만들어준 zipfile_name 폴더 안에 압축할 파일들을 넣어줍니다.


#Zip::File.open(zip폴더이름, Zip::File::CREATE) 형식으로 zipfile을 만들어서, 그 안에 원하는 파일들 넣어줌
Zip::File.open(zipfile_name, Zip::File::CREATE) do |zipfile|
  input_filenames.each do |filename|
    # zipfile.add(파일이름, 파일 원본 주소)
    zipfile.add(filename, File.join(folder, filename))
  end
end

5. (추가) 위에서 만든 zipfile을 다운로드 하고 싶을때는 send_file을 사용할 수 있습니다.

#Zip::File.open.. 블록 밑에 작성
#send_file('zip file 주소', type, filename)
send_file(File.join("#{Rails.root}/public/", 'archive.zip'), :type => 'application/zip', :filename => "#{Time.now.to_date}.zip")

전체 코드

압축 파일 전체 코드입니다.

require 'rubygems'
require 'zip'

# 압축할 파일들이 있는 폴더 (예시)
folder = "#{Rails.root}/public/downloads"
input_filenames = ['image.jpg', 'description.txt', 'stats.csv']

#위 파일들을 묶어줄 zip 폴더를 만들어줌
zipfile_name = "#{Rails.root}/public/archive.zip"

#Zip::File.open(zip폴더이름, Zip::File::CREATE) 형식으로 zipfile을 만들어서, 그 안에 원하는 파일들 넣어줌
Zip::File.open(zipfile_name, Zip::File::CREATE) do |zipfile|
  input_filenames.each do |filename|
    # zipfile.add(파일이름, 파일 원본 주소)
    zipfile.add(filename, File.join(folder, filename))
  end
end

위 예제들은 rubyzip gem 링크에 더 자세히 설명이 되어있습니다.




Profile picture
@김하연
4년차 프론트엔드 개발자 입니다. 사용자 경험 개선, 코드의 재사용성, 읽기 쉬운 코드에 집중하여 개발합니다.
AboutGithub LinkedinResume
Loading script...