[Ruby on Rails] Nén và giải nén file zip giữ nguyên cấu trúc thư mục


Trong Rails 5, để xử lý nén và giải nén file zip, chúng ta sử dụng 1 thư viện của Ruby là rubyzip. Trong bài viết này, mình sẽ hướng dẫn các bạn sử dụng thư viện rubyzip để nén 1 file từ 1 thư mục mà vẫn giữ nguyên cấu trúc thư mục, và giải nén 1 file ra thư mục trong Ruby on Rails

* Tài liệu về RubyZip: https://github.com/rubyzip/rubyzip

Hướng dẫn nén và giải nén file zip giữ nguyên cấu trúc thư mục

1. Thêm thư viện rubyzip vào project

– Sửa file Gemfile của Rails Project, thêm dependency sau:

# Ruby zip
gem 'rubyzip', '>= 1.0.0'

– Chạy command sau để update gem cho Rails

bundle update

Nếu thành công thì khi check thông tin gem bạn sẽ có kết quả như bên dưới.

2. Function giải nén (unzip) file zip mà vẫn giữ nguyên cấu trúc thư mục trong file zip

require 'zip'

# unzip_foder
def unzip_folder(file_path)
  Zip::File.open(file_path) do |zip_file|
    zip_file.each do |f|
      f_path = [‘/tmp’, f.name].join('/')
        FileUtils.mkdir_p(File.dirname(f_path))
        zip_file.extract(f, f_path)
    end
  end
end

3. Function nén folder thành file zip mà vẫn giữ nguyên cấu trúc thư mục

require 'zip'

# zip folder
def zip_folder(dist_path)
  source_path = ‘/tmp/source’
  Zip::File.open(dist_path, Zip::File::CREATE) do |zip_file|
    Dir.chdir source_path
    Dir.glob('**/*').each do |file|
      zip_file.add(file.sub(source_path + '/', ''), file)
    end
  end
end

Nguồn: vinasupport.com

             
SHARE

Bài viết liên quan

mode_edit Bình luận của bạn

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

account_circle
web