Ruby zip:zipfileに圧縮して複数のファイルをダウンロード


Ruby zip:zipfileに圧縮して複数のファイルをダウンロード
  • rubyzipは、複数の画像または複数のファイルをzipfileとして作成するgemである.
  • 参考:https://github.com/rubyzip/rubyzip
  • 1.rubyzip gemfileのインストール
    gem 'rubyzip', '>= 1.0.0'
    gem 'zip-zip' 
    2.zipfile変換コードのページを作成するにはrubygemsとzipが必要です.
    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
  • 逆も然り.(例えば、https://github.com/rubyzip/rubyzip/blob/9d891f7353e66052283562d3e252fe380bb4b199/samples/example_recursive.rb)
  • 上記の例はrubyzip gemリンクでより詳細に説明した.