You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不解压读取嵌套Zip文件中的内容?

不解压到文件系统查看嵌套Zip内容的方法

你可以利用Zip::Entry的get_input_stream方法直接获取内层Zip文件的数据流,无需先将其提取到文件系统,再用Zip::File处理这个流即可查看内容。以下是具体实现代码:

require 'zip'

# 打开外层Zip文件
Zip::File.open('outer.zip') do |outer_zip|
  # 找到目标内层Zip条目(这里以匹配第一个zip文件为例,可根据实际路径调整)
  inner_zip_entry = outer_zip.glob('**/*.zip').first
  next unless inner_zip_entry

  # 获取内层Zip的输入流,全程不写入文件系统
  inner_zip_entry.get_input_stream do |stream|
    # 用Zip::File处理数据流,操作方式和普通Zip文件一致
    Zip::File.open(stream) do |inner_zip|
      # 遍历内层Zip的所有条目
      inner_zip.each do |entry|
        puts "内层文件名称:#{entry.name}"
        
        # 如果需要查看文件内容,可通过entry的输入流读取
        entry.get_input_stream do |file_stream|
          puts "文件内容:\n#{file_stream.read}"
        end
      end
    end
  end
end

关键说明

  • get_input_stream方法直接从外层Zip中读取内层Zip的二进制数据,完全跳过磁盘写入步骤,非常适合单元测试场景,避免不必要的IO开销
  • 处理内层流的方式和普通Zip文件完全一致,你可以根据需求遍历条目、读取指定文件内容,或者做其他验证操作

补充:这种嵌套Zip的结构是Apple Wallet批量添加票据的要求,并非无意义的压缩嵌套。

内容的提问来源于stack exchange,提问作者masukomi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 06:06:10