我一直在使用rubyzip
zip/unzip 来压缩从 20MB 到 1GB 的文件/文件夹。我注意到在压缩 20MB 的文件夹后,创建的 zipfile 的大小几乎相同,大约为 20MB。所以rubyzip
只是压缩文件或实际压缩它因为压缩文件必须小于实际文件大小的 40%-50%。我什至尝试使用system(zip, archive, Dir["#{path}/**/**"])
,但我想我无法获得正确的语法来调用它。所以我的问题是
- 为什么
rubyzip
无法创建大小也必须更小的实际 zip 文件。 - 对于超过 500MB 的 zip 文件,我如何使用 send_file 将其发送到客户端,因为对于该大小的文件,它会带来成本性能问题。如果我将 500MB 或以上的 zip 放在公共文件夹中并让服务器服务会怎样它可能会提高性能,我正确吗?
- 有没有其他选择而不是使用
rubyzip/zipruby
(这也需要库)。
我正在使用 ruby 1.9 和 rails 2.3。
我的代码:-
require 'zip/zip'
require 'fileutils'
require 'zip/zipfilesystem'
def self.compress_test(path)
path="#{RAILS_ROOT/answers/}"
path.sub!(%r[/$],'')
archive = File.join(path,File.basename(path))+'.zip'
FileUtils.rm archive, :force=>true
Zip::ZipFile.open(archive, 'w') do |zipfile|
Dir["#{path}/**/**"].reject{|f|f==archive}.each do |file|
begin
zipfile.add(file.sub(path+'/',''),file)
rescue Zip::ZipEntryExistsError
end
end
end
end