Ruby 壓縮文件夾 之前找了很久 網上看到的方法 備份一下

zip_util.rb

 

 

require 'zip/zip'
class ZipUtil
  # 壓縮文件方法
  # zip_file_name 壓縮文件絕對路徑,含文件名
  # file_path 要解壓的目錄或文件
  def self.add_to_zip_file(zip_file_name,file_path)
    # start_path 表示
    def self.add_file(start_path,file_path,zip)
      # 如果文件是一個目錄則遞歸調用此方法
      if File.directory?(file_path)
        # 建立目錄
        # 如果省略下一行代碼,則當目錄爲空時,此目錄將不會顯示在壓縮文件中
        zip.mkdir(file_path)
        #        puts "建立目錄#{file_path}"
        Dir.foreach(file_path) do |filename|
          #遞歸調用add_file方法
          add_file("#{start_path}/#{filename}","#{file_path}/#{filename}",zip) unless filename=="." or filename==".."
        end
      else
        # 給壓縮文件中添加文件
        # start_path 被添加文件在壓縮文件中顯示的路徑
        # file_path 被添加文件的源路徑
        zip.add(start_path,file_path)
        #        puts "添加文件#{file_path}"
      end
    end

    # 如果文件已存在,則刪除此文件
    if File.exist?(zip_file_name)
      #      puts "文件已存在,將會刪除此文件並重新建立。"
      File.delete(zip_file_name)
    end

    # 取得要壓縮的目錄父路徑,以及要壓縮的目錄名
    chdir,tardir = File.split(file_path)
    # 切換到要壓縮的目錄
    Dir.chdir(chdir) do
      # 創建壓縮文件
      #      puts "開始創建壓縮文件"
      Zip::ZipFile.open(zip_file_name,Zip::ZipFile::CREATE) do |zipfile|
        #        puts "文件創建成功,開始添加文件..."
        # 調用add_file方法,添加文件到壓縮文件
        #        puts "已添加文件列表如下:"
        add_file(tardir,tardir,zipfile)
      end
    end
  end 
end

 

使用:

zip_file_url = "/brand_cards/#{record.brand_id}/#{record.id}"
        if File.exist?("#{RAILS_ROOT}/public/#{zip_file_url}.zip")
          File.delete("#{RAILS_ROOT}/public/#{zip_file_url}.zip")
        end
ZipUtil.add_to_zip_file("#{RAILS_ROOT}/public/#{zip_file_url}.zip","#{RAILS_ROOT}/public/#{zip_file_url}")

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章