我正在使用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
目前,这是使用我想要的名称创建一个zipfile,但目录中的文件没有正确压缩。它们不是作为文件压缩而是作为目录压缩。
答案 0 :(得分: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
。