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}")

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值