2012-07-17 214 views
1

我使用RubyZip嘗試壓縮目錄中的所有文件。這裏是我的類:壓縮目錄中的所有文件

require 'zip/zip' 
require 'zip/zipfilesystem' 

class Lesson < ActiveRecord::Base 
    attr_accessible :attachment, :course_id, :goal, :title, :assets_attributes 
    belongs_to :course 
    has_many :assets, :dependent => :destroy 
    accepts_nested_attributes_for :assets, :reject_if => lambda { |a| a[:asset_file_name].blank? } 

    def bundle 
    bundle_filename = "public/attachments/#{self.id}/#{self.id}.zip" 

    Zip::ZipFile.open(bundle_filename, Zip::ZipFile::CREATE) { 
    |zipfile| 
     Dir.foreach("public/attachments/#{self.id}") do |item| 
     zipfile.add(item, "public/attachments/") 
     end 
    } 

    File.chmod(0644, bundle_filename) 
    self.save 
    end 
end 

目前,這一情況與我想要的名字一個壓縮文件,但在目錄中的文件沒有被正確地拉上。他們不會被壓縮爲文件,而是作爲目錄。

+0

你能否提供更多的細節:你的預期產出是什麼,你究竟得到了什麼? *「...被壓縮爲文件但是作爲目錄...」*可以通過幾種方式解釋,因此請澄清。 – 2012-07-17 15:17:41

回答

1

如果你在Linux服務器上運行,你可以嘗試unix_utils

tmp_filename = UnixUtils.zip "public/attachments/#{self.id}" 
bundle_filename = "public/attachments/#{self.id}/#{self.id}.zip" 
FileUtils.mv tmp_filename, bundle_filename 
File.chmod 0644, bundle_filename 

第一行拉鍊在public/attachments/#{self.id}一切tmp目錄下文件(tmp_filename)。然後您移動並將該文件重命名爲bundle_filename

+0

我的意思是它創建了我想從試圖的主目錄壓縮的文件的名稱。例如,如果在dir中存在名爲readme.txt的文件,那麼在zip文件「readme.txt」中將作爲文件夾添加,而不是作爲預期的文本文件。 – 2012-07-17 15:24:02

相關問題