0

我现在正在做一个项目,我需要从远程服务器上的文件中读取标头数据。我说的是很多大文件,所以我无法读取整个文件,而只是我需要的标题数据。

我唯一的解决方案是使用 fuse 安装远程服务器,然后从文件中读取标题,就好像它们在我的本地计算机上一样。我已经尝试过了,它有效。但它有一些缺点。特别是 FTP:

  • 真的很慢(FTP 与带有 curlftpfs 的 SSH 相比)。从同一台服务器,使用 SSH 90 文件在 18 秒内被读取。并在 39 秒内使用 FTP 10 个文件。
  • 不可靠。有时不会卸载挂载点。
  • 如果服务器处于活动状态并且完成了被动安装。该挂载点和父文件夹在大约 3 分钟内被锁定。
  • 是否超时,即使有数据传输(猜测这是 FTP 协议而不是 curlftpfs)。

Fuse 是一个解决方案,但我不是很喜欢它,因为我觉得我不能信任它。所以我的问题基本上是这个问题是否有其他解决方案。语言最好是 Ruby,但如果 R​​uby 不支持该解决方案,任何其他语言都可以使用。

谢谢!

4

3 回答 3

1

您在寻找什么类型的信息?

您可以尝试使用 ruby​​ 的 open-uri 模块。以下示例来自http://www.ruby-doc.org/stdlib/libdoc/open-uri/rdoc/index.html

require 'open-uri'
open("http://www.ruby-lang.org/en") {|f|
  p f.base_uri         # <URI::HTTP:0x40e6ef2 URL:http://www.ruby-lang.org/en/>
  p f.content_type     # "text/html"
  p f.charset          # "iso-8859-1"
  p f.content_encoding # []
  p f.last_modified    # Thu Dec 05 02:45:02 UTC 2002
}

编辑:看来操作想从远程文件中检索 ID3 标记信息。这更复杂。

来自维基:这似乎是一个难题。

在维基上:

文件中的标记位置

只有 ID3v2.4 标准才有可能将标签数据放在文件末尾,这与 ID3v1 相同。ID3v2.2 和 2.3 要求标签数据位于文件之前。虽然对于流数据这是绝对需要的,但对于静态数据,这意味着必须更新整个音频文件以在文件的前面插入数据。对于初始标记,这会导致很大的损失,因为必须重写每个文件。鼓励标签编写者在标签数据之后引入填充,以便在不需要重写整个音频文件的情况下编辑标签数据,但这不是标准的,标签要求可能会有很大差异,特别是如果 APIC (相关图片)也被嵌入。

这意味着根据文件的 ID3 标签版本,您可能需要读取文件的不同部分。

这是一篇文章,概述了使用 ruby​​ for ID3tagv1.1 读取 ID3 标签的基础知识,但应该作为一个很好的起点:http ://rubyquiz.com/quiz136.html

您还可以考虑使用 ID3 解析库,例如id3.rbid3lib-ruby;但是,我不确定是否支持解析远程文件的能力(很可能可以通过一些修改)。

于 2009-03-12T20:48:47.647 回答
0

已经提出了一个RANG命令,允许只检索文件的一部分(这里是第一个字节)。

但是,我没有找到包含此提案的任何参考,也没有找到实施。

因此,对于特定服务器,测试(或检查 FTP 服务器的文档)可能很有用 - 如果可用,请使用它。

于 2020-10-21T09:11:19.913 回答
0

“最好的”解决方案是开始传输,并在下载的文件超过字节时停止传输。由于允许中断连接的库不多(如果有的话),因此它更复杂,可能需要您手动编写特定的 ftp 客户端,有两个线程,一个执行 FTP 连接和传输,另一个监视大小下载的文件并杀死第一个线程。

或者,至少,您可以并行化文件传输。这样您就不必等待所有文件被完全传输来分析文件的开头。然后转移将继续

于 2020-10-21T09:14:00.307 回答