从远程服务器上的文件读取标头数据

时间:2009-03-12 20:29:38

标签: ftp ssh header mount fuse

我现在正在开展一个项目,我需要从远程服务器上的文件中读取标题数据。我正在谈论许多大文件,所以我无法读取整个文件,只是我需要的标题数据。

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

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

保险丝是一种解决方案,但我不太喜欢它,因为我觉得我不相信它。所以我的问题基本上是否有任何其他问题的解决方案。语言最好是Ruby,但如果Ruby不支持该解决方案,任何其他语言都可以使用。

谢谢!

3 个答案:

答案 0 :(得分: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标记信息。这更复杂。

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

在维基上:

  

标记文件中的位置

     

只有ID3v2.4标准才有   可以将标签数据放在   文件的结尾,与...相同   ID3v1的。 ID3v2.2和2.3要求   标签数据在文件之前。同时   对于流数据,这绝对是   必需的,对于静态数据来说意味着   整个音频文件必须是   更新以在前面插入数据   文件。用于初始标记   每个文件都会受到很大的惩罚   必须重写。标签作者是   鼓励在之后引入填充   标签数据以便允许   没有编辑标签数据   需要整个音频文件   重写,但这些都不是标准的   标签要求可能会有所不同   非常,特别是如果APIC   (相关图片)也是   嵌入

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

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

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

答案 1 :(得分:0)

有人提出了RANG command的建议,该建议只允许检索文件的一部分(此处是前几个字节)。

但是,我没有发现包含此建议或实施的任何参考。

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

答案 2 :(得分:0)

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

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