【问题标题】:Open URI downloading corrupt files打开 URI 下载损坏的文件
【发布时间】:2016-05-21 04:30:52
【问题描述】:

我正在尝试使用 Ruby 下载 .tar.gz 文件。下载后,文件总是以某种方式损坏。

我正在使用此代码下载文件:

require "open-uri"
File.open('img.tar.gz', 'wb') do |fo|
  fo.write open('https://github.com/Arafatk/language-basics/blob/master/img.tar.gz').read 
end

有没有办法解决这个问题?

【问题讨论】:

  • 对不起,我没有让自己更清楚。但我想使用 ruby​​ 下载 zip 文件,但由于某种原因文件被损坏了。所以我想问是否有其他方法可以做到这一点?
  • 文件以何种方式“损坏”?您是否检查过文件以查看实际下载了哪些数据?
  • 我不确定这是否是正确的说法。但是如果我尝试打开文件,它会说加载存档时出错

标签: ruby open-uri


【解决方案1】:

open调用中改变文件模式:

open('https://github.com/Arafatk/language-basics/blob/master/img.tar.gz', "rb").read

当你想要 binary 模式时,它以 text 模式打开文件。

您还需要使用正确的 URL 从 Github 下载原始文件。在这种情况下,可以通过右键单击文件回购页面上的 Raw 链接(给出的原始 URL)找到正确的 URL,并且 Raw URL 是包含您的实际二进制图像的 URL试图下载。将 URL 更改为:https://github.com/Arafatk/language-basics/raw/master/img.tar.gz,我在答案顶部建议的更改效果很好。

【讨论】:

  • a.rb:3:in write': not opened for writing (IOError) from a.rb:3:in block in
    ' from a.rb:2:in open' from a.rb:2:in
    '
  • 谢谢,但它仍然无法正常工作。该链接是公开的,您也可以尝试下载。它对你有用吗?
  • @ArafatK 使用 curl -g https://github.com/Arafatk/language-basics/blob/master/img.tar.gz -o img.tar.gz 会导致相同的损坏文件。 Github(文件的主机)返回 HTML 而不是 .tar.gz 文件。 cat img.tar.gz 显示的是一个 HTML 页面,而不是一个二进制字节,正如您对 .tar.gz 文件所期望的那样。
  • 请注意,github 在页面上有一个标记为Raw 的按钮,用于获取我刚刚给你的 URL。否则,您将获得一个 HTML 页面,其中显示有关您在存储库中的文件的信息。
猜你喜欢
  • 2021-04-07
  • 2020-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 2015-07-16
  • 2017-12-04
  • 2019-01-28
相关资源
最近更新 更多