2012-07-18 55 views
-1

我想用RubyZip壓縮目錄中包含的所有文件。下面是我有:用Ruby on Rails壓縮目錄中的文件

def bundle 
     #create the ZIPfile with the title of (:id).zip 
bundle_filename = "public/attachments/#{self.id}/#{self.id}.zip" 

     #open the ZIPfile in order to add items in 
Zip::ZipFile.open(bundle_filename, Zip::ZipFile::CREATE) { 
    |zipfile| 
    Dir.foreach("public/attachments/#{self.id}") do |item| 
    t = File.open(item) 
    zipfile.add(t, "public/attachments/#{self.id}") 
    end 
    } 

    #change permissions on ZIPfile 
    File.chmod(0644, bundle_filename) 
    self.save 
    end 

這成功地執行了第一行,並創建具有正確名稱的ZIP文件,但它不加入包含在該目錄中的所有文件。有任何想法嗎?

+0

你確定'Dir.foreach'調用是添加項目嗎?你可以使用'Rails.logger'來調試。 – tadman 2012-07-18 18:21:23

+0

看看這個,http://stackoverflow.com/questions/11525484/zipping-all-files-in-a-dir – PriteshJ 2012-07-18 18:23:36

+0

Wohooo,是來自同一用戶的同一個問題;) – PriteshJ 2012-07-18 18:26:07

回答

0

我不知道這是否是最正確的方法,但這對我有用。 這種拉鍊拉鍊

require 'zip/zip' 

    def bundle 
     bundle_filename = "abc.zip" 
     FileUtils.rm "abc.zip",:force => true 
     dir = "testruby" 
     Zip::ZipFile.open(bundle_filename, Zip::ZipFile::CREATE) { |zipfile| 
     Dir.foreach(dir) do |item| 
      item_path = "#{dir}/#{item}" 
      zipfile.add(item,item_path) if File.file?item_path 
     end 
     } 
    File.chmod(0644,bundle_filename) 
    end 
2

所有從目錄中的文件和文件夾,使您的生活更輕鬆,並使用命令行功能在Ruby方法:

在此實現,我拉上一個軌道目錄,所以在Rails函數的幫助下,我可以訪問該目錄的完整路徑。你可以自己指定整個路徑。

path = Rails.root.to_s + "/public/tmpFiles" 
archive = path + "/tempFilesArchive.zip" 
puts "Path: #{path}" 
puts "Archive: #{archive}" 
`rm "#{archive}"` # remove the archive file, if it exists. 
`zip -rj "#{archive}" "#{path}"` # zip the contents of the directory 

這應該在您壓縮的同一個目錄中創建一個名爲「tempFilesArchive.zip」的zip文件。