标签: rubyzip

如何使用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
Run Code Online (Sandbox Code Playgroud)

如何设置ZipEntry中的数据?我必须使用临时文件吗?

ruby ruby-on-rails unzip rubyzip

6
推荐指数
2
解决办法
6700
查看次数

Rubyzip vs本机OS压缩

我想知道使用rubyzip压缩数据与使用本机os库执行压缩时的性能差异.我从URL获取要压缩的数据,然后使用ZipOutputStream创建zip文件.在本机OS实用程序的情况下,我正在考虑使用zip工具.很高兴听到两种方法的优点和缺点.

ruby zip rubyzip

6
推荐指数
1
解决办法
726
查看次数

如何使用rubyzip解压缩压缩文件夹

我知道如何使用rubyzip检索普通zip文件的内容.但是我解压缩拉链文件夹的内容时遇到了麻烦,我希望你们中的任何人都可以帮助我.

这是我用来解压缩的代码:

Zip::ZipFile::open(@file_location) do |zip|
 zip.each do |entry|
  next if entry.name =~ /__MACOSX/ or entry.name =~ /\.DS_Store/ or !entry.file?
  logger.debug "#{entry.name}"
  @data = File.new("#{Rails.root.to_s}/tmp/#{entry.name}")
 end
end
Run Code Online (Sandbox Code Playgroud)

entry.name为我提供了zip文件中文件的名称.这与普通的zipfile完美配合.但是当从文件夹创建zipfile时,条目的名称类似于:test-folder/test.pdf.当我然后尝试创建该文件时,它告诉我无法找到该文件.这可能是因为它位于拉链内的"测试"文件夹内.

如果我将条目检查为文件夹,则无法找到任何文件夹.所以我认为解决方案是将条目作为流读取,然后将其另存为文件.很容易获得入门流,但如何将其保存为文件?这是我到目前为止所得到的.

Zip::ZipFile::open(@file_location) do |zip|
 zip.each do |entry|
  next if entry.name =~ /__MACOSX/ or entry.name =~ /\.DS_Store/ or !entry.file?
  logger.debug "#{entry.name}"
  @data = entry.get_input_stream.read
  # How do i create a file from a stream?
 end
end
Run Code Online (Sandbox Code Playgroud)

基本上我的问题是:如何从流创建文件?还是比我的更方便?

===编辑===我用paperclip来存储文件.

ruby rubyzip ruby-on-rails-3

6
推荐指数
2
解决办法
6745
查看次数

zipruby或rubyzip?

我在rails网站上有一个ruby(rails 2.0.2,ruby 1.8.6),同时安装了rubyzip和zipruby,但它们在File.exists上有冲突吗?方法所以我想删除一个.关于最好的压缩api前进的普遍共识是什么?

一个是否有显着的优势?

ruby ruby-on-rails rubyzip

6
推荐指数
2
解决办法
6188
查看次数

在Rails中压缩目录

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

ruby zip ruby-on-rails rubyzip

6
推荐指数
1
解决办法
7215
查看次数

递归压缩目录并跳过容器目录

考虑一下,我们有以下目录结构:

Location:
/Users/me/Desktop/directory_to_zip/
dir1 dir2 somefile.txt
Run Code Online (Sandbox Code Playgroud)

现在,如果我使用rubyzip压缩directory_to_zip使用以下代码的内容:

directory = '/Users/me/Desktop/directory_to_zip/'
zipfile_name = '/Users/me/Desktop/recursive_directory.zip'

Zip::File.open(zipfile_name, Zip::File::CREATE) do |zipfile|
    Dir[File.join(directory, '**', '**')].each do |file|
      zipfile.add(file.sub(directory, ''), file)
    end
end
Run Code Online (Sandbox Code Playgroud)

这将创建一个名为 的 zip 文件recursive_directory.zip,其中将包含一个名为directory_to_zip& inside的容器目录directory_to_zip,我会找到我的 files( dir1 dir2 somefile.txt)

我如何跳过directory_to_zipinside 的创建recursive_directory.zip,以便 zip 文件只包含directory_to_zip& 而不是目录本身的内容。

ruby ruby-on-rails rubyzip

6
推荐指数
1
解决办法
1263
查看次数

使用 ruby​​zip 压缩并在 Windows 上解压后,Xlsx 文件在 MS Excel 上会出现错误

实际上我的要求是将一些文件压缩到一些文件夹中。我已经在我的服务器上保存了许多文件并与一些对象关联。所以我必须压缩与一个对象相关的所有文件,如下所示:

  • 主文件夹
    • 子文件夹
      • 另一个文件夹
        • XLSX 文件

这是我的层次结构的一个示例。我所做的是创建这些文件夹,复制这些文件夹中的文件,并使用以下代码创建 zip:

https://github.com/rubyzip/rubyzip/blob/05916bf89181e1955118fd3ea059f18acac28cc8/samples/example_recursive.rb

在 ruby​​zip 库本身上找到。但是,当我在 Windows 上解压缩此文件并在 Microsoft Excel 中打开它时,出现以下错误:

我们发现“FileName.xlsx”中的某些内容存在问题。您希望我们尽力恢复吗?如果您信任此工作簿的来源,请单击“是”

按“是”可以恢复文件,但我不知道为什么会出现此错误。我尝试在将 Excel 文件复制到工作正常的服务器上时打开该文件,但是一旦压缩并解压缩该文件,就会出现错误。我已经看到了该主题的一些不同问题,例如:

由 ruby​​zip 压缩的 xlsx 无法被 Excel 读取

但没有得到帮助。

我尝试做的更多事情就是设置压缩级别,并尝试将其设置为Zlib::DEFAULT_COMPRESSIONruby​​zip,但尽管如此,我还是遇到了同样的问题。另外,在某些地方,甚至在自述文件中,如果 ruby​​zip 我发现我们可以使用:

改用write_bufferopen

我在这条线上尝试了它(我能找到的最好的):

https://github.com/rubyzip/rubyzip/blob/7aa3666e341b4ecf3b66321d734802a77bba962b/lib/zip/file.rb#L311

但它给了我一个不同的例外,所以如果这是解决方案,我不知道如何使用它。

ruby ruby-on-rails rubyzip ruby-on-rails-3 axlsx

6
推荐指数
0
解决办法
676
查看次数

How can I avoid "Zip end of central directory signature not found (Zip::Error)" with rubyzip?

I'm reading a lot of zip file with rubyzip.

However this error message is always showing in only specific file even it is zip file.

/app/vendor/bundle/ruby/2.3.0/gems/rubyzip-1.2.1/lib/zip/central_directory.rb:143:in `get_e_o_c_d': Zip end of central directory signature not found (Zip::Error)

I guess this error occures in rubyzip.

How can I manage this error?

Here is my code.

url = 'http://example.zip'

zipfilename = open(url)

Zip::File.open(zipfilename, :allow_redirections => :all) do |zip_file|

   entry = zip_file.glob("*ixbrl.htm").first

   stream = entry.get_input_stream.read

   puts stream

end
Run Code Online (Sandbox Code Playgroud)

Thank you!

ruby rubyzip

6
推荐指数
2
解决办法
1930
查看次数

使用ZipOutputStream的Zip文件中的子目录

我正在使用此处描述的技术创建一个zip文件:

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

客户端已要求我在此zip文件中包含子目录.我搜索了ZipOutputStream文档但我看不到包含目录的方法.有没有办法用ZipOutputStream做到这一点?我应该使用与ZipOutputStream不同的类吗?

此外,我正在压缩的文件不在本地文件系统上,而是存储在云服务中.

ruby zip rubyzip

5
推荐指数
1
解决办法
1675
查看次数

创建多个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
def to_csv
  CSV.generate do |csv|
    #build awesome csv
  end
end
Run Code Online (Sandbox Code Playgroud)

有没有办法临时保存我的csv文件在某个目录,我可以将路径名传递给zipfile.add()?

好周末大家和快乐的编码!

csv ruby-on-rails rubyzip

5
推荐指数
1
解决办法
4502
查看次数

标签 统计

rubyzip ×10

ruby ×9

ruby-on-rails ×6

zip ×3

ruby-on-rails-3 ×2

axlsx ×1

csv ×1

unzip ×1