我知道这个主题还有另一个主题,但即使使用了所有解决方案后我仍然面临这个问题.有没有其他方法来生成zip文件?我可以使用Ubuntu系统命令吗?
我做到了
gem install rubyzip
Run Code Online (Sandbox Code Playgroud)
我有
require 'rubygems'
require 'zip/zip'
Run Code Online (Sandbox Code Playgroud)
在我的控制器中
但我仍然得到相同的错误 - 没有这样的文件加载 - zip/zip我尝试使用ruby 1.8.7和ruby 1.9.2与rails 3.0.5在Ubuntu
请你帮助我好吗?谢谢.
我正在使用rubyzip压缩csv文件,因此用户可以下载它.这在开发模式下完美运行.但是当我尝试在生产服务器(rackspace)上压缩文件时,我收到错误:LoadError(无法加载此类文件 - zip/zip).这是路径问题吗?有人知道修复吗?
我的代码在这一行调用错误:require'zip/zip'
我从这里尝试了解决方案,但它没有帮助.
我试图打开一个docx文件并使用rubyzip 1.0.0和rails 3写回来.
在我的gemfile中我有:
gem 'rubyzip'
Run Code Online (Sandbox Code Playgroud)
我正在运行的代码是;
module Look
class Generator
def initialize(item)
doc = Nokogiri::XML.parse(item.to_xml)
xslt = Nokogiri::XSLT(File.read("<path_to_xslt_file>.xslt"))
@outxml=xslt.transform(doc)
zip = Zip::ZipFile.open("<path_to_docx_file>.docx")
@outxml
end
end
end
Run Code Online (Sandbox Code Playgroud)
虽然正确创建了@outxml(我可以手动将其添加到docx文件并查看结果),但我甚至无法开始创建zip文件,因为这...
uninitialized constant Zip::ZipFile
Run Code Online (Sandbox Code Playgroud)
检查了所有文档并尝试了很多组合后,我仍然感到非常难过.
任何人都可以告诉我为什么这不起作用?
谢谢.
我正在尝试使用roo gem来处理由外部方上传的.xlsx电子表格.我收到以下错误:
LoadError(无法加载此类文件 - zip/zipfilesystem):
我发现了很多类似于这个的问题(比如无法加载这样的文件 - zip/zip),我试图按照他们的解决方案.到目前为止,无济于事.
我最初在控制器中需要'roo',在得到这个错误之后尝试了'zip/zip','zip/zipfilesystem',只是'zip'.这些似乎都没有解决任何问题.我还尝试添加:require =>'zip',:require =>'zip/zipfilesystem',:require =>'zip/zip'到Gemfile,但这些似乎都没有改变.这是一些相关的代码:
在Gemfile中:
# for spreadsheet upload management
gem 'roo'
gem 'rubyzip'
gem 'spreadsheet'
gem 'nokogiri'
Run Code Online (Sandbox Code Playgroud)
安装版本:
nokogiri (1.6.0)
roo (1.12.1)
rubyzip (1.0.0)
spreadsheet (0.8.9)
Run Code Online (Sandbox Code Playgroud)
在控制器中:
require 'roo'
module BatchOrderProcessing
class DataFilesController < ApplicationController
def create
# some code here ...
when ".xlsx"
spreadsheet = Roo::Excelx.new(uploaded_io.path, nil, :ignore)
header = spreadsheet.row(1)
if # some validation stuff...
puts "spreadsheet format inappropriate"
redirect_to # some place
end
process_datafile(fname, spreadsheet)
# more code …Run Code Online (Sandbox Code Playgroud) 我正在使用rubyzip和nokogiri的组合来编辑.docx文件.我正在使用rubyzip来解压缩.docx文件,然后使用nokogiri来解析和更改word/document.xml文件的正文,但是我最后关闭rubyzip它会破坏文件而我无法打开它或者修理它.我在桌面上解压缩.docx文件并检查word/document.xml文件,并将内容更新为我更改为的内容,但所有其他文件都搞砸了.有人可以帮我解决这个问题吗?这是我的代码:
require 'rubygems'
require 'zip/zip'
require 'nokogiri'
zip = Zip::ZipFile.open("test.docx")
doc = zip.find_entry("word/document.xml")
xml = Nokogiri::XML.parse(doc.get_input_stream)
wt = xml.root.xpath("//w:t", {"w" => "http://schemas.openxmlformats.org/wordprocessingml/2006/main"}).first
wt.content = "New Text"
zip.get_output_stream("word/document.xml") {|f| f << xml.to_s}
zip.close
Run Code Online (Sandbox Code Playgroud) 我有这个代码,它将一个zip文件写入磁盘,将其读回,上传到s3,然后删除该文件:
compressed_file = some_temp_path
Zip::ZipOutputStream.open(compressed_file) do |zos|
some_file_list.each do |file|
zos.put_next_entry(file.some_title)
zos.print IO.read(file.path)
end
end # Write zip file
s3 = Aws::S3.new(S3_KEY, S3_SECRET)
bucket = Aws::S3::Bucket.create(s3, S3_BUCKET)
bucket.put("#{BUCKET_PATH}/archive.zip", IO.read(compressed_file), {}, 'authenticated-read')
File.delete(compressed_file)
Run Code Online (Sandbox Code Playgroud)
这段代码已经可以使用,但我想要的是不再创建zip文件,以节省一些步骤.我想知道是否有办法将zipfile数据直接导出到s3而不必先创建一个tmp文件,读回来然后删除它?
我有问题需要下载,解压缩,然后逐行处理一个非常大的CSV文件.我认为让您了解文件的大小是有用的:
这是我想要发生的一些事情:
我不知道这是否可能.这就是我的想法:
require 'open-uri'
require 'rubyzip'
require 'csv'
open('http://foo.bar/big_file.zip') do |zipped|
Zip::InputStream.open(zipped) do |unzipped|
sleep 10 until entry = unzipped.get_next_entry && entry.name == 'big_file.csv'
CSV.foreach(unzipped) do |row|
# process the row, maybe write out to STDOUT or some file
end
end
end
Run Code Online (Sandbox Code Playgroud)
这是我所知道的问题:
open-uri读取整个响应并将其保存到Tempfile这个大小的文件中.我可能需要Net::HTTP直接使用,但我不知道该怎么做,仍然得到一个IO.Zip::InputStream我的工作方式是否正常.当它不是全部时,它可以解压缩一些文件吗?CSV.foreach用rubyzip的工作InputStream?它的行为是否足以File解析行?如果它想要读取但缓冲区是空的,它会变得怪异吗?我不知道这是否是正确的做法.也许一些EventMachine解决方案会更好(虽然我以前从未使用过EventMachine,但如果它对这样的东西更好用,我就是为了它).
我正在努力让rubyzip将目录附加到zipoutputstream.(我想要输出流,所以我可以从rails控制器发送它).我的代码遵循以下示例:
http://info.michael-simons.eu/2008/01/21/using-rubyzip-to-create-zip-files-on-the-fly/
当修改为包含要添加的文件列表中的目录时,我收到以下错误:
任何帮助将不胜感激.
UPDATE
在尝试了一些解决方案后,我在zipruby上获得了最大的成功,它有一个干净的api和很好的例子:http://zipruby.rubyforge.org/.
我在rails网站上有一个ruby(rails 2.0.2,ruby 1.8.6),同时安装了rubyzip和zipruby,但它们在File.exists上有冲突吗?方法所以我想删除一个.关于最好的压缩api前进的普遍共识是什么?
一个是否有显着的优势?
实际上我的要求是将一些文件压缩到一些文件夹中。我已经在我的服务器上保存了许多文件并与一些对象关联。所以我必须压缩与一个对象相关的所有文件,如下所示:
这是我的层次结构的一个示例。我所做的是创建这些文件夹,复制这些文件夹中的文件,并使用以下代码创建 zip:
在 rubyzip 库本身上找到。但是,当我在 Windows 上解压缩此文件并在 Microsoft Excel 中打开它时,出现以下错误:
我们发现“FileName.xlsx”中的某些内容存在问题。您希望我们尽力恢复吗?如果您信任此工作簿的来源,请单击“是”
按“是”可以恢复文件,但我不知道为什么会出现此错误。我尝试在将 Excel 文件复制到工作正常的服务器上时打开该文件,但是一旦压缩并解压缩该文件,就会出现错误。我已经看到了该主题的一些不同问题,例如:
由 rubyzip 压缩的 xlsx 无法被 Excel 读取
但没有得到帮助。
我尝试做的更多事情就是设置压缩级别,并尝试将其设置为Zlib::DEFAULT_COMPRESSIONrubyzip,但尽管如此,我还是遇到了同样的问题。另外,在某些地方,甚至在自述文件中,如果 rubyzip 我发现我们可以使用:
改用
write_bufferopen
我在这条线上尝试了它(我能找到的最好的):
但它给了我一个不同的例外,所以如果这是解决方案,我不知道如何使用它。