问题标签 [rubyzip]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
485 浏览

ruby-on-rails - RubyZip 将 JPG 转换为“不是 JPG,以 0x89 开头”

我正在使用 RubyZip 压缩一组图像(使用 Paperclip 上传)并允许用户将它们下载到一个文件中,并且在我打开图像之前一切正常。它不会显示,在 Ubuntu 上尝试我收到错误消息:

因此,用户正在下载一个文件夹,该文件夹由具有正确用户名的文件填充,但在打开时无法显示,因为计算机无法显示其“格式”。

控制器:

谢谢!

0 投票
3 回答
5025 浏览

ruby-on-rails - 如何使用 nokogiri 和 ruby​​zip 编辑 docx

我正在使用 ruby​​zip 和 nokogiri 的组合来编辑 .docx 文件。我正在使用 ruby​​zip 解压缩 .docx 文件,然后使用 nokogiri 解析和更改 word/document.xml 文件的正文,但是每次我最后关闭 ruby​​zip 时它都会损坏文件并且我无法打开它或修复它。我在桌面上解压缩 .docx 文件并检查 word/document.xml 文件,内容已更新为我更改的内容,但所有其他文件都搞砸了。有人可以帮我解决这个问题吗?这是我的代码:

0 投票
1 回答
2435 浏览

ruby-on-rails-3 - 回形针处理器找不到它的文件

以前:在创建或更新后在回形针附件上运行模型方法(回形针回调似乎不起作用)

编辑(那天晚些时候) 我发现了我的问题。处理器显然可以处理更新的文件,但在处理之前不会保存任何文件。我将 Zip::ZipFile 更改为打开 'file' 而不是 'attachment.path',因为附件路径实际上还没有任何内容。这解决了第一个问题。现在我遇到了其他需要追查的问题。但下面的答案大多是正确的。

编辑(2011 年 1 月 31 日):

因此,我接受了建议,为我的附件创建一个处理器,它将执行所有必要的操作。到目前为止,它看起来应该可以工作;显然,处理器启动并执行所有初始化工作。但是,当我想访问上传的 zip 文件时,我收到一条错误消息,提示找不到该文件。我的处理器的代码如下:

这是我得到的错误内容:

据我所知,它正在正确的位置寻找文件,但该文件似乎尚未上传以访问它。据我所知,Paperclip 足够聪明,可以知道并等待附件上传,然后再尝试处理它。谁能发现我在这里做错了什么?

非常感谢。

老东西:

我正在使用 Rails 3 和 Paperclip 开发照片库应用程序。管理员能够创建画廊并上传包含一堆图像的 zip 文件。

我想要发生的事情:

  1. 输入画廊信息和 zip 文件以上传到表单中。
  2. 点击“创建画廊”按钮。
  3. 表单帖子、图库保存和 zip 文件被上传。
  4. 上传 zip 文件后,运行 :extract_photos 方法(顺便说一句,此代码有效)。4.a. 在此方法结束时,zip 文件被销毁。
  5. 管理员被重定向到包含所有照片的画廊页面(其中画廊 has_many 照片)。

我试图用几种不同的方式来完成这项工作。

之前,我创建了一个控制器方法,它允许管理员单击运行 :extract_photos 方法的链接。这在我的计算机上有效,但由于某种原因,服务器无法在客户端计算机上路由它。所以这是不行的。另外,我认为这是一种丑陋的做法。

最近,我尝试使用回调方法。after_save 不起作用,因为它显然会中断表单 POST 并且文件没有上传并且 :extract_photos 方法找不到文件。

我在 Paperclip github 页面上查看了回调方法,它谈到了回调:

在后处理步骤之前和之后,Paperclip 通过几个回调回调模型,允许模型更改或取消处理步骤。回调是“before_post_process”和“after_post_process”(在处理每个附件之前和之后调用),以及特定于附件的“beforepost_process”和“afterpost_process”。回调旨在尽可能接近正常的 ActiveRecord 回调,因此如果您在前过滤器中返回 false(特别是 - 返回 nil 不一样),后处理步骤将停止。在 after 过滤器中返回 false 不会停止任何操作,但您可以在必要时访问模型和附件。

我尝试使用 before_post_process 和 after_post_process,但它找不到运行该进程的文件,因此在调用这些方法时文件显然没有上传(我认为这很奇怪)。此外,当我尝试 beforepost_process 和 afterpost_process 时,我得到一个 NoMethodError。

那么如何在创建或更新附件时调用附件上的方法,但在文件上传并在正确的位置之后?

更新

我尝试了下面的代码,将我的提取方法代码移动到处理器的 make 方法中。在尝试编写处理器方面,我比以前走得更远,但这仍然是不行的。一旦我尝试打开上传的文件进行处理,该过程就会引发异常,说该文件不存在。命名方案是正确的,一切都是正确的,但在触发过程之前仍然没有上传任何内容。有谁知道为什么会这样?

0 投票
2 回答
3763 浏览

file - 如何直接从 ZipEntry(RubyZip、Paperclip、Rails 3)获取临时文件对象(内容类型正确,无需写入磁盘)?

我目前正在尝试将图像文件直接从 zip 文件附加到模型(即,无需先将它们保存在磁盘上)。似乎应该有一种更清晰的方法将 ZipEntry 转换为可以存储在内存中的 Tempfile 或 File 以传递给另一个知道如何处理它的方法或对象。

这是我的代码:

但问题是 photo.image 是模型的附件(通过回形针),并且将某些内容分配为附件需要某些内容是 File 对象。但是,我一生都无法弄清楚如何将 ZipEntry 转换为文件。我见过的打开或创建文件的唯一方法是在其路径中使用一个字符串——这意味着我必须将文件提取到一个位置。真的,这似乎很愚蠢。为什么我不能将 ZipEntry 文件提取到输出流并将其转换为那里的文件?

所以最终的问题是:我可以从 Zip 文件中提取 ZipEntry 并将其直接转换为 File 对象(或将其直接附加为 Paperclip 对象)吗?还是我在附加它之前实际上将它存储在硬盘上,即使该版本最终会被删除?

更新 感谢蓝莓领域,我想我离我的解决方案更近了一点。这是我添加的代码行,它为我提供了我需要的 Tempfile/File:

但是,我的Photo对象不会接受通过的文件,因为它不是image/jpeg. 事实上,检查content_type文件显示application/x-empty. 我认为这可能是因为获取输出流似乎在文件末尾附加了一个时间戳,因此它最终看起来像imagename.jpg20110203-20203-hukq0n. 编辑:此外,它创建的临时文件不包含任何数据,大小为 0。所以看起来这可能不是答案。

那么,下一个问题:有谁知道如何得到这个给我一个图像/jpeg 文件?

更新

我一直在玩这个。似乎输出流不是要走的路,而是输入流(这总是让我感到困惑)。在 ZipEntry 上使用 get_input_stream,我得到了文件中的二进制数据。我想现在我只需要弄清楚如何将它放入回形针附件(作为文件对象)。我尝试将 ZipInputStream 直接推送到附件,但当然,这不起作用。我真的很难相信没有人尝试将提取的 ZipEntry 转换为文件。有什么理由认为这会被认为是不好的编程习惯吗?在我看来,跳过临时文件的磁盘写入是完全可以接受的,并且在 Zip 存档管理之类的东西中得到支持。

无论如何,问题仍然存在:

有没有办法将输入流转换为文件对象(或临时文件)?最好不必写入磁盘。

0 投票
2 回答
764 浏览

ruby - Rubyzip 与本机操作系统压缩

我想知道使用 ruby​​zip 压缩数据与使用本机 os 库执行压缩相比会有什么性能差异。我正在从 URL 获取要压缩的数据,然后使用 ZipOutputStream 创建 zip 文件。对于本机操作系统实用程序,我正在考虑使用 zip 工具。很高兴听到这两种方法的一些利弊。

0 投票
1 回答
139 浏览

ruby - losing data when zipping files

I am using rubyzip on windows to zip up a directory. When I unzip the archive some of the files are smaller than they were.

Zipping should be a lossless operation so I am wondering why this is happening.

Here is the code I am using:

The specific files that are having an issue are from a firefox profile. cert8.db and key3.db

Running the same code under jruby on linux with the same files works as expected - all the files are the same size.

Any ideas why this is a problem on windows?

0 投票
1 回答
289 浏览

ruby - rubyzip 指导

在上面的代码中,我有Zip::ZipOutputStream.open(file_path) do |z|. 我不明白,这是什么|z|意思?|z| 是什么意思?参考?例如,我可以更改 |z| 对于其他,例如 |changez| ?

我在这里得到了完整的代码 http://blog.devinterface.com/2010/02/create-zip-files-on-the-fly/但我无法理解 do |z| 的第一行 .

0 投票
1 回答
2797 浏览

ruby-on-rails - 动态生成图像的 zip 时出现 ruby​​zip 错误:未找到中央目录结尾签名

我正在从一组图像中生成一个 zip 文件,然后将其发送给用户。

我使用的代码与本页给出的示例几乎完全相同;

http://info.michael-simons.eu/2008/01/21/using-rubyzip-to-create-zip-files-on-the-fly/

它在我的本地开发机器上工作得非常好,但是当我在我的登台服务器上运行它时,我得到一个零长度的 zipfile,当我尝试打开它时出现以下错误。

'未找到中央目录结尾签名'

显然,当它在我的开发机器上运行良好时,很难解决我哪里出错了!

干杯,格雷姆

0 投票
3 回答
2056 浏览

ruby - 哪个 zip 库适用于 Ruby 1.9.2?

我之前在 Ruby 1.8.7 中使用过 ruby​​zip gem,但我听说 ruby​​zip 不适用于 ruby​​ 1.9.2。

哪些 zip 库适用于 Ruby 1.9.2?

0 投票
7 回答
21119 浏览

ruby-on-rails - 使用 ruby​​zip 错误 - 没有要加载的文件 - zip/zip

我知道关于这个主题还有另一个主题,但即使在使用所有解决方案后我仍然面临这个问题。有没有其他方法可以生成 zip 文件?我可以使用 Ubuntu 系统命令吗?

我做了

我有

在我的控制器中

但我仍然遇到同样的错误 - 没有要加载的文件 - zip/zip 我尝试在 Ubuntu 上使用 ruby​​ 1.8.7 和 ruby​​ 1.9.2 和 rails 3.0.5

请你帮助我好吗?谢谢。