Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the wordpress-seo domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /var/www/vinascript/html/wp-includes/functions.php on line 6114
Nén và giải nén file zip giữ nguyên cấu trúc thư mục trong Ruby on Rails - VinaScript

Latest Post

Triển khai dự án PHP, Mysql với Nginx trên Docker Tìm hiểu về HTML – Ưu điểm, nhược điểm và cách hoạt động của HTML

Trong Rails 5, để xử lý việc nén và giải nén các tệp zip, chúng ta có thể sử dụng thư viện Ruby là “rubyzip”. Trong hướng dẫn này, tôi sẽ giúp bạn hiểu cách sử dụng thư viện “rubyzip” để nén một tệp từ một thư mục cụ thể và duy trì cấu trúc thư mục ban đầu. Chúng ta cũng sẽ tìm hiểu cách giải nén một tệp zip và đưa nó vào một thư mục cụ thể 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

Để lại một bình luậ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 *