我正在尝试使用RubyZip压缩目录中包含的所有文件。这就是我所拥有的:
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 :(得分:3)
让您的生活更轻松,并在ruby方法中使用命令行函数:
在这个实现中,我正在压缩rails目录,所以我在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文件。在您压缩的同一目录中。
答案 1 :(得分:1)
我不知道这是否是最正确的方法,但这对我有用。 这会压缩zip中的dir中的所有文件和文件夹
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