Ruby 流 tar/gz

2024-02-10

基本上我想将内存中的数据流式传输为 tar/gz 格式(可能将多个文件传输到 tar 中,但它永远不应该接触硬盘,只能流式传输!),然后将它们流式传输到其他地方(在我的例子中是 HTTP 请求体)。

有人知道现有的图书馆可以做到这一点吗? Rails 中有什么东西吗?

libarchive-ruby http://rubydoc.info/gems/libarchive-ruby/0.0.3/frames只是一个 C 包装器,看起来它非常依赖于平台(文档希望您将编译作为安装步骤?!)。

解决方案:

require 'zlib'
require 'rubygems/package'

tar = StringIO.new

Gem::Package::TarWriter.new(tar) { |writer|
  writer.add_file("a_file.txt", 0644) { |f| 
    (1..1000).each { |i| 
      f.write("some text\n")
    }
  }
  writer.add_file("another_file.txt", 0644) { |f| 
    f.write("some more text\n")
  }
}
tar.seek(0)

gz = Zlib::GzipWriter.new(File.new('this_is_a_tar_gz.tar.gz', 'wb'))  # Make sure you use 'wb' for binary write!
gz.write(tar.read)
tar.close
gz.close

就是这样!您可以用任何 IO 交换 GzipWriter 中的文件以保持其流式传输。 dw11wtq 的饼干!


看一下 ruby​​gems 中的 TarWriter 类:http://rubygems.rubyforge.org/rubygems-update/Gem/Package/TarWriter.html http://rubygems.rubyforge.org/rubygems-update/Gem/Package/TarWriter.html它只是对 IO 流进行操作,该流可能是 StringIO。

tar = StringIO.new

Gem::Package::TarWriter.new(tar) do |writer|
  writer.add_file("hello_world.txt", 0644) { |f| f.write("Hello world!\n") }
end

tar.seek(0)

p tar.read #=> mostly padding, but a tar nonetheless

如果您需要 tarball 中的目录布局,它还提供了添加目录的方法。

作为参考,您可以通过以下方式实现 gzippingIO.popen,只是通过管道将数据输入/输出系统进程:

http://www.ruby-doc.org/core-1.9.2/IO.html#method-c-popen http://www.ruby-doc.org/core-1.9.2/IO.html#method-c-popen

gzip 压缩本身看起来像这样:

gzippped_data = IO.popen("gzip", "w+") do |gzip|
  gzip.puts "Hello world!"
  gzip.close_write
  gzip.read
end
# => "\u001F\x8B\b\u0000\xFD\u001D\xA2N\u0000\u0003\xF3H\xCD\xC9\xC9W(\xCF/\xCAIQ\xE4\u0002\u0000A䩲\r\u0000\u0000\u0000"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby 流 tar/gz 的相关文章

  • 供用户使用的 Rails 模型结构

    我是 Rails 新手 正在开发我的第二个 Rails 应用程序 该应用程序将为用户提供不同的角色 但某些用户将具有多个角色 该网站的每个用户都将是艺术家 一些用户将担任主持人的角色 我将如何构建这个 在我使用的一些 PHP 应用程序中 只
  • 检查数组元素的大小是否相同

    有没有最好 最有效的方法来检查数组元素的大小是否相同 1 2 3 4 5 gt false 1 2 3 4 5 6 gt true 我有什么 def element of same size arr arr map size uniq si
  • 在 cygwin 和 powershell 中查看不同的 gem 列表

    我用的是gem listpowershell 和 cygwin 中的命令都显示不同的 gem 列表 Cygwin 显示 LOCAL GEMS bundler 1 2 3 json 1 7 5 minitest 2 12 1 rake 0 9
  • PageSpeed Insights 没有看到 Gzip 压缩

    我正在努力加快我的网站速度 谷歌洞察 https developers google com speed pagespeed insights https developers google com speed pagespeed insi
  • 设计涟漪

    我正在尝试使用以 riak 作为数据库的设备创建身份验证 我找到了同样的 ORM 策略https github com frank06 devise ripple https github com frank06 devise ripple
  • Ruby 元编程方法列表?

    刚刚开始学习 Ruby 元编程 看看 Object methods 我得到 Object methods gt allocate new superclass freeze lt gt lt lt gt gt to s included m
  • 使用 ruby​​ Net::SSH 通过 sudo 读取远程文件

    我必须读取我有权 sudo 读取的远程文件的内容 猫 少或尾巴 我将在 Ruby 中执行此操作 因此我认为应该使用 Net SSH 来执行此操作 该文件是一个日志文件 因此可能会很大 这是我现在正在尝试的代码 require rubygem
  • 当你不继承Rails 4中的ApplicationController时,如何包含respond_to?

    我在 Rails 4 1 2 应用程序中有一个 API 控制器 它不继承自应用程序控制器 我试图包含 respond to 方法并得到一个方法未定义的错误 所以然后我需要在顶部的操作包 如下所示 require action pack cl
  • Ruby on Rails 中的枚举

    我是一名 C 程序员 我正在研究 ruby on Rails 但我可能在心态或其他方面遇到了一些麻烦 我有一个投票对象 该对象可以是赞成 中立或反对 我通常会让投票对象有一个像这样的字段 private VoteEnum voteEnum
  • 将 StringBuilder 写入 Stream

    将 StringBuilder 写入 System IO Stream 的最佳方法是什么 我目前正在做 StringBuilder message new StringBuilder All your base message Append
  • 有没有办法编写一个匹配除文件夹中的文件之外的所有文件的全局模式?

    我需要编写一个文件 glob 它将匹配除特定文件夹中包含的文件之外的所有文件 例如 除了高级文件夹中包含的文件之外的所有文件 foo 我已经到达以下区域 foo 然而 这个 glob 似乎与 Ruby 中的任何文件都不匹配File fnma
  • Rails 5.2 Active Storage 添加自定义属性

    我有一个带有附件的模型 class Project lt ApplicationRecord has many attached images end 当我附加并保存图像时 我还想保存一个附加的自定义属性 display order 整数
  • 在 Windows 上安装 RMagick

    我对此进行了研究 并且在我的一台计算机上花了几个小时 大约三周前 我在我的台式计算机上安装了 RMagick 它相当复杂 我不记得我采取的具体步骤 我真的很沮丧 我已将 ImageMagick 安装到我的计算机上的目录 C ImageMag
  • 带有可选第一个哈希参数和keyword_args的奇怪方法行为

    我有以下方法 def test first param nil keyword arg nil puts first param first param puts keyword arg keyword arg end 以下所有调用都按照我
  • 使用 node.js 上的 knox 将八位字节流从请求流式传输到 S3

    我正在尝试使用以下命令将八位字节流直接流式传输到 S3knox https github com LearnBoost knox 在 Node js 上 octet stream 是从浏览器上传的 XHR 文件 我以为我可以将请求流式传输到
  • 如何在 Rails 3 中连接表并计算记录数?

    我有一个Collection有很多硬币的类 我正在尝试选择拥有两枚以上硬币的收藏品 目前 我可以直接通过 Ruby 来完成此操作 但效率极低 我当前的代码 collections Collection all select c c coin
  • 查找数组中 2 个缺失数字的最快方法

    这个问题的存在只是出于纯粹的好奇心 不是作业 找到在数组 1 n 中找到两个缺失数字的最快方法 因此 在相关帖子中 查找数字数组中缺失数字的最快方法 https stackoverflow com questions 2113795 qui
  • heroku 语言区域设置不工作 I18n::MissingTranslationData

    在我的本地电脑上一切正常 但在 heroku 上我收到错误 我的 Heroku 控制台 PC HOME PC c rails konkurranceportalen master heroku console Ruby console fo
  • 从轨道控制器返回

    这是一个初学者 Rails 问题 我这样做之后 format xml head ok 如何从控制器端点返回而不显示视图 如果我此时放弃函数的末尾 我会得到我所期望的结果 但如果我调用 返回 我最终会进入视图 或者在我的情况下会出现缺少的视图
  • 在Ruby中从csv文件中获取第二行[重复]

    这个问题在这里已经有答案了 actual row File open file name 0 r first row data CSV foreach actual row do row first row data lt lt row 1

随机推荐

  • 如何在正则表达式中处理 \^$.?*|+()[{ 等特殊字符?

    我想匹配一个正则表达式特殊字符 http www regular expressions info characters html 我试过 x lt a b grepl x Error invalid regular expression
  • 使用selenium解决验证码问题

    我下面的代码是不断解决不同的验证码 请纠正我的错误 因为我不知道是什么原因造成的 from selenium import webdriver from python3 anticaptcha import ImageToTextTask
  • 通过单击按钮动态地将文本框添加到表单中

    我是一名 php 程序员 我有一个用户输入表单 其中一个人应该能够通过单击按钮添加任意数量的文本框 以输入多个电子邮件 ID 例如 他单击按钮第一次添加了一个附加文本框 他第二次单击该按钮 添加了另一个文本框 等等 您可以通过以下方式创建元
  • Java正则表达式匹配带有撇号的单词

    我有一句话 不 没关系 滞后 我试图检测 无滞后 模式 我的正则表达式是no s w s 1 3 lag 这失败了 但是 如果我的句子是 no it all right lag 请注意 它的单词没有撇号 则匹配成功 谁能建议我如何忽略窗口中
  • 分割字符串并保留分隔符

    我正在编写一个 chrome 扩展 我需要拆分一个仅包含文本和 img 标签的字符串 以便数组的每个元素都是字母或 img 标签 例如 a b c
  • Android-如何在文本视图上显示文本选择?

    我正在实现一个 epub 阅读应用程序 其中使用 textview 来显示 epub 文本 我想当用户长按文本视图时从文本视图中选择文本 然后对文本视图的选定文本执行多种操作 例如突出显示等 那么 我如何向用户显示这些光标来选择用户想要的文
  • 天文台重置

    我正在尝试完全重新启动 Chronometer 但它不起作用 相反 它正在暂停 基本上我想做的是在计时器计数到 10 时做一些事情 完成后我们提示用户重试 在这种情况下 我们希望从 1 秒重新计数到 10 秒 但计时器从暂停时间开始 而不是
  • Emscripten 绑定:如何从 Javascript 创建可访问的 C/C++ 数组?

    我在用box2d https github com kripken box2d js 并尝试创建一个链条形状 为了创建链形状或多边形形状 我必须传递向量数组才能指定几何形状 我没有看到任何文档可以帮助我完成此任务 也没有看到有关绑定的注释h
  • ASP.NET - Server.HtmlEncode 将哪些字符编码为命名字符实体

    Server HtmlEncode 将哪些字符编码为命名字符实体 到目前为止我只发现 lt gt amp and quot 肯定还有更多的事情吗 这是代码HtmlEncode 所以在这里您可以看到他们是如何做到的 public static
  • C“for”循环中的多个条件

    我遇到了这段代码 我通常使用 或 将多个条件分开for循环 但此代码使用逗号来执行此操作 令人惊讶的是 如果我改变条件的顺序 输出就会改变 include
  • freemarker跳过assertNotNull InvalidReferenceException

    我使用 freemarker 渲染对象列表 ul lt list publication as item gt li b item key b item value li ul 但有些项目的 item value null 会引发异常 fr
  • Runbook 测试窗格不显示写入输出

    我对自动化是全新的 对 Powershell 也很陌生 所以我希望这是一个简单的修复 我正在尝试让一些代码运行 据我所知 它确实运行了 但测试窗格没有显示任何内容 基于此线程 Azure powershell Runbook 不显示任何输出
  • 从 ionic 应用程序调用本机 Android 应用程序

    我正在开发一个将由 Android 本机应用程序调用的应用程序 我还得给他们打电话 为此我发现这个插件 https github com EddyVerbruggen Custom URL scheme 他们将按照以下代码调用我的应用程序
  • 如何实现 dropzone.js 将文件上传到 Amazon s3 服务器?

    请帮助实现 dropzone js 将文件上传到 Amazon s3 服务器 已经参考了以下链接https github com enyo dropzone issues 33 https github com enyo dropzone
  • 如何在Android上从方位角获取罗盘方向

    我必须显示用户指向 Android 设备的方向 我在用Sensor TYPE ACCELEROMETER Sensor TYPE MAGNETIC FIELD获取方位角 俯仰角 横滚角 但我能够弄清楚如何从中获取方向 北 南 东 西 请帮忙
  • eclipse使用什么算法在Serialized类中生成verison id?

    假设这是我的班级 class B implements Serializable private static final long serialVersionUID 5186261241138469827L what algo is us
  • 如何在Java中独立于主线程运行线程?

    目标是能够调用执行单独的线程从内部主班 一些背景 我有一个程序必须运行process 过程 一个cmd 仅当主程序执行完毕并从内存中卸载时才应运行 我应该在其中包含什么代码主班 如果你的意思是 我如何启动一个不会在我的 JVM java 程
  • Google 在 iOS 上设置自动完成功能 - 无法加载搜索结果 - 请重试

    我在这里发布这个是因为我不知道还能在哪里发布这个 今天 我们的应用程序不再返回 Google Places API 的结果 我们看到该请求在 Google 开发者控制台上得到通过 但所有手机均未返回任何结果 今天这个数字还在攀升 并且每个用
  • 比较两个指针是否相等的二叉搜索树遍历

    我正在阅读 Cormen 算法书 二叉搜索树章节 它说有两种无需递归即可遍历树的方法 使用堆栈和 更复杂但更优雅 不使用堆栈的解决方案 但 假设两个指针可以 测试平等 我已经实现了第一个选项 使用堆栈 但不知道如何实现后者 这不是作业 只是
  • Ruby 流 tar/gz

    基本上我想将内存中的数据流式传输为 tar gz 格式 可能将多个文件传输到 tar 中 但它永远不应该接触硬盘 只能流式传输 然后将它们流式传输到其他地方 在我的例子中是 HTTP 请求体 有人知道现有的图书馆可以做到这一点吗 Rails