【发布时间】:2013-09-27 06:37:58
【问题描述】:
我一直在使用rubyzip 压缩/解压缩 20MB 到 1GB 的文件/文件夹。我注意到在压缩 20MB 的文件夹后,创建的 zipfile 的大小几乎相同,大约为 20MB。@987654322 也是如此@ 只是压缩文件或实际压缩它,因为压缩文件必须小于实际文件大小的 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
【问题讨论】:
-
压缩率取决于文件的类型。总大小为 20MB 的文件夹中有哪些类型的文件?
-
文件夹结构是这样的 parent/child1 child2 等等,最多 100 个,子文件夹的文件可以是 xls、zip、txt 文件,其中一个父文件夹将有一个集合 o 文件夹每个大约 3-5MB。
-
如果压缩 zip 文件的文件夹,生成的文件不会变小。
-
感谢 Neil 的快速回复。它并不总是会有 zip 文件。我创建了一个包含静态图像的文件夹,xls 文件进行测试,但使用上述代码压缩后,zip 的大小为几乎一样。
-
xls文件应该压缩一点(可能压缩到原始文件的 50%),但jpg、png或gif不会(它们已经在里面压缩了,你会得到99% 原始大小或类似大小)- 图像通常比电子表格文件大,因此您可能不会注意到总文件大小。
标签: ruby-on-rails ruby ruby-on-rails-3 zip rubyzip