Ruby on rails 压缩目录中的所有文件
我使用RubyZip试图压缩目录中的所有文件。这是我的班级:Ruby on rails 压缩目录中的所有文件,ruby-on-rails,ruby,Ruby On Rails,Ruby,我使用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
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
需要'zip/zip'
需要“拉链/拉链系统”
课程:销毁
接受:assets的_嵌套的_属性_,:reject _if=>lambda{a | a[:asset _file _name]。空白?}
def包
bundle_filename=“public/attachments/#{self.id}/#{self.id}.zip”
Zip::ZipFile.open(bundle\u文件名,Zip::ZipFile::CREATE){
|拉链|
目录foreach(“public/attachments/#{self.id}”)do | item|
zipfile.add(项目“公共/附件/”)
结束
}
chmod文件(0644,bundle_文件名)
自救
结束
结束
目前,这正在使用我想要的名称创建zipfile,但目录中的文件压缩不正确。它们不是压缩为文件而是压缩为目录。如果您在Linux服务器上运行,您可以尝试:
第一行将
public/attachments/{self.id}
中的所有内容压缩到tmp目录中的一个文件(tmp_filename
)。然后将此文件移动并重命名为bundle\u filename
如果您在Linux服务器上运行,您可以尝试:
第一行将
public/attachments/{self.id}
中的所有内容压缩到tmp目录中的一个文件(tmp_filename
)。然后您将此文件移动并重命名为bundle\u filename
您可以提供更详细的信息吗:您预期的输出是什么,实际得到的是什么?“…压缩为文件,但压缩为目录…”可以用两种方式解释,因此请澄清。您能否提供更详细的信息:您预期的输出和实际得到的输出是什么?“…压缩为文件,但压缩为目录…”可以用两种方式解释,因此请澄清。我的意思是,它使用我要从尝试的主目录压缩的文件名创建目录。例如,如果dir中存在一个名为readme.txt的文件,则zipfile中的“readme.txt”将被添加为文件夹,而不是预期的文本文件。我的意思是,它使用我希望从主目录压缩的文件名创建dir。例如,如果dir中存在一个名为readme.txt的文件,则zipfile中的“readme.txt”将添加为文件夹,而不是预期的文本文件。
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