Tag: rubyzip

创建多个csv文件并使用rails在一个zip-archive中下载

我正在寻找一种方法来创建多个csv文件,并在我的rails应用程序中的一个请求中将它们下载为一个zip存档。 要构建存档,我使用rubyzip gem – 只下载rails内置函数send_data。 我遇到的问题是rubyzip的add-function需要一个路径名来加载文件。 但是没有路径,因为我的csv文件是在同一个请求中创建的。 一些代码: # controller action to download zip def download_zip zip = @company.download_all send_data zip, filename: “abc.zip”, type: ‘application/zip’ end # method to create zip def download_all Zip::File.open(‘def.zip’, Zip::File::CREATE) do |zipfile| self.users.each do |user| #some magic to combine zipfile.add() and user.to_csv end end end # method to create csv […]

如何使用nokogiri和rubyzip编辑docx

我正在使用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

使用rubyzip错误 – 没有这样的文件加载 – zip / zip

我知道这个主题还有另一个主题,但即使在使用所有解决方案后我仍然面临这个问题。 有没有其他方法来生成zip文件? 我可以使用Ubuntu系统命令吗? 我做到了 gem install rubyzip 我有 require ‘rubygems’ require ‘zip/zip’ 在我的控制器中 但我仍然得到相同的错误 – 没有这样的文件加载 – zip / zip我尝试使用ruby 1.8.7和ruby 1.9.2与rails 3.0.5在Ubuntu 请你帮助我好吗? 谢谢。

使用Zipfilegenerator类,Ruby生成zip时的资源锁定

我在railsJS和ruby轨道上有一个应用程序。 我通过代码生成子文件夹和html文件。 就像我的文件夹结构一样 -根 —– Sub1的 ———- Sub_Sub1 ———- Sub_Sub2 ———-的index.html —–分公司2 —– abc.html 我通过Zipfilegenerator生成了目录的zip文件。 我已经创建了这个function,以便在生成目录之前系统检查是否存在任何具有相同名称的先前目录,然后它将删除该目录,然后生成新目录。 这是我删除文件夹和文件的代码。 #delete all files Dir.glob(“path/to/dir/.”) do |rb_file| File.delete(rb_file) end FileUtils.rm_rf(“path/to/dir/”) #delete all sub directory FileUtils.mkdir(“path/to/dir/”) #create root directory 这是创建zip的代码 zf = ZipFileGenerator.new(directory_to_zip, output_file) zf.write() 现在我有一个奇怪的问题,第一次一切正常工作生成zip文件生成但第二次系统无法删除第一次尝试中创建的根和子文件夹中的文件。 我已经调查了这个问题,发现当我评论zip创建代码时,文件被成功删除了。 所以我在从目录生成zip时面临资源锁定问题。 能帮我解决一下这个问题吗?

什么可以解释“无效的存储块长度”错误?

我正在Vagrant虚拟盒中的基本Ubuntu lucid32映像上运行带有Ruby 1.9.3p194的Rails(3.2.3)应用程序。 虚拟盒在Leopard上运行,因为它的价值。 我正在尝试在应用程序中使用rubyzip来解压缩zip存档2009_da_lmp.zip 。 直接使用rubyzip存储库中的示例代码,我可以确认我可以列出存档文件内容: #f is the absolute path to 2009_da_lmp.zip (string) Zip::ZipFile.open(f) { |zf| zf.entries[0] } => 20090101_da_lmp.csv #that is indeed a file in the archive. 使用存储库中示例中的更多代码,我尝试获取存档中的实际文件: Zip::ZipInputStream.open(f) { |zis| entry = zis.get_next_entry print “first line of ‘#{entry.name}’ (#{entry.size} bytes: ) ” puts “‘#{zis.gets.chomp}'” } => first line of ‘20090101_da_lmp.csv’ (826610 […]

在Rails中压缩目录

我如何在rails上的ruby中压缩目录? 我试过rubyzip没有成功。 我不需要单独压缩dir的内容只是压缩dir本身。

如何使用rubyzip库获取压缩文件的内容?

我正在尝试提取上传的zip文件并将其内容存储在数据库中,每个文件一个条目。 rubyzip库几乎没有有用的文档。 有一个资产表,其中包含键:字符串(文件名)和数据:二进制(文件内容)。 我正在使用rubyzip库,并且已经做到了这一点: Zip::ZipFile.open(@file_data.local_path) do |zipfile| zipfile.each do |entry| next if entry.name =~ /__MACOSX/ or entry.name =~ /\.DS_Store/ or !entry.file? asset = self.assets.build asset.key = entry.name asset.data = ?? # what goes here? end end 如何设置ZipEntry中的数据? 我必须使用临时文件吗?

Ruby:下载zip文件并解压缩

我有一个ruby脚本,使用rubys open命令从服务器下载远程ZIP文件。 当我查看下载的内容时,它显示如下内容: PK\x03\x04\x14\x00\b\x00\b\x00\x9B\x84PG\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n\x00\x10\x00foobar.txtUX\f\x00\x86\v!V\x85\v!V\xF6\x01\x14\x00K\xCB\xCFOJ,RH\x03S\\\x00PK\a\b\xC1\xC0\x1F\xE8\f\x00\x00\x00\x0E\x00\x00\x00PK\x01\x02\x15\x03\x14\x00\b\x00\b\x00\x9B\x84PG\xC1\xC0\x1F\xE8\f\x00\x00\x00\x0E\x00\x00\x00\n\x00\f\x00\x00\x00\x00\x00\x00\x00\x00@\xA4\x81\x00\x00\x00\x00foobar.txtUX\b\x00\x86\v!V\x85\v!VPK\x05\x06\x00\x00\x00\x00\x01\x00\x01\x00D\x00\x00\x00T\x00\x00\x00\x00\x00 我尝试使用Rubyzip gem( https://github.com/rubyzip/rubyzip )及其类Zip::ZipInputStream如下所示: stream = open(“http://localhost:3000/foobar.zip”).read # this outputs the zip content from above zip = Zip::ZipInputStream.new stream 不幸的是,这会引发错误: Failure/Error: zip = Zip::ZipInputStream.new stream ArgumentError: string contains null byte 我的问题是: 通常,是否可以下载ZIP文件并将其内容提取到内存中? Rubyzip是否适合它? 如果是这样,我该如何提取内容?

使用rubyzip将文件和嵌套目录添加到zipoutputstream

我正在努力让rubyzip将目录附加到zipoutputstream。 (我想要输出流,所以我可以从rails控制器发送它)。 我的代码遵循以下示例: Using rubyzip to create zip files on the fly 当修改为包含要添加的文件列表中的目录时,我收到以下错误: 任何帮助将不胜感激。 UPDATE 在尝试了一些解决方案后,我在zipruby上获得了最大的成功,它有一个干净的api和很好的例子:http: //zipruby.rubyforge.org/ 。

使用RubyZip生成ZIP文件时设置压缩级别

我有一个Ruby程序,它使用rubyzip gem来压缩 XML文件的目录树。 我的问题是文件开始变重,我想提高压缩级别,因为压缩时间不是问题。 我在rubyzip文档中找不到为创建的ZIP文件指定压缩级别的方法。 有谁知道如何更改此设置? 是否有另一个允许指定压缩级别的Ruby库?