当前位置: 首页 > 知识库问答 >
问题:

如何用Ruby的file.new编写一个附件压缩文件?

拓拔君博
2023-03-14

保存zip附件的ruby代码:

attachment = imap.fetch(message_id, "BODY[2]")[0].attr["BODY[2]"]
save_path = "#{save_path_base}/#{fname}"
File.new(save_path, "wb+").write(attachment.unpack("m"))

在我的本地计算机(OS X)上运行unzip file.zip的文件可以很好地工作,但是在远程计算机(CentOS)上,相同的命令会产生一个错误:

未找到中央目录结束签名。要么这个文件不是zipfile,要么它构成了多部分归档的一个磁盘。在后一种情况下,中央目录和zipfile注释将在这个归档的最后一个磁盘上找到。

编辑:

在我的本地计算机上,file file.Zip给了我Zip归档数据,至少要提取V2.0版本。我的本地Ruby版本是Ruby 1.8.7(2012-02-08 PatchLevel358)

在我的远程服务器上,该命令返回ASCII文本,包含很长的行,没有行结束符。我的远程Ruby版本是Ruby 2.0.0p647(2015-08-18)

共有1个答案

司空劲
2023-03-14

当然,解决方案是找出Ruby版本之间发生了什么变化。本文指出:

在1.8中相当于调用join,在1.9中相当于调用inspect。要在1.8和1.9中获得所需的行为,请调用join而不是to_s

所以解决办法是把线改为

File.new(save_path, "wb+").write(attachment.unpack("m").join)
 类似资料:
  • 我需要在没有中间存储的情况下读写压缩(GZIP)流。目前,我使用Spring

  • 问题内容: 我已经找到了许多有关如何从.zip中提取 所有 文件的示例,但是我不知道如何在不迭代.zip文件中的所有文件的情况下提取单个文件。 Go中是否可以从.zip存档中提取单个文件,而无需遍历.zip文件中的所有文件? 例如,如果一个zip文件包含: 我将只提取 吗? 问题答案: 为您提供的归档文件的内容,这些文件作为 片 (的)。没有通过名称获取文件的帮助程序方法,您必须使用循环来遍历文件

  • 我有多个zip文件在一个文件夹和另一个zip文件存在于每一个这些zip文件夹。我想解压第一个和第二个zip文件夹,并创建它们自己的目录。 这是结构 如上所示,在中,我们有多个zip文件,在每个zip文件中,都存在另一个zip文件。我想解压缩,,和到新的文件夹中。我想使用与父zip文件夹相同的名称来放置每个结果。我尝试了以下答案,但这只解压缩第一个文件夹。 顺便说一句,我在Jenkins管道中运行这

  • 我正在使用Julia的ZipFile包来提取和处理csv文件。没问题,但是当我遇到zip文件中的zip文件时,我也想处理它,但是遇到了一个错误。 Julia ZipFile文档如下:https://zipfilejl.readthedocs.io/en/latest/ 对如何做到这一点有什么想法吗?

  • 问题 你想读写一个gzip或bz2格式的压缩文件。 解决方案 gzip 和 bz2 模块可以很容易的处理这些文件。 两个模块都为 open() 函数提供了另外的实现来解决这个问题。 比如,为了以文本形式读取压缩文件,可以这样做: # gzip compression import gzip with gzip.open('somefile.gz', 'rt') as f: text = f

  • 问题内容: 我在stackoveflow上找到了一些关于如何压缩特定文件的代码,但是特定文件夹又如何呢? 在中,有文件。压缩后,我还想删除文件夹的全部内容,除了。 我需要你的帮助。谢谢。 问题答案: 代码已于2015/04/22更新。 压缩整个文件夹: 压缩整个文件夹+删除除“ important.txt”以外的所有文件: