Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ftp 从远程服务器上的文件读取头数据_Ftp_Ssh_Header_Mount_Fuse - Fatal编程技术网

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

Ftp 从远程服务器上的文件读取头数据,ftp,ssh,header,mount,fuse,Ftp,Ssh,Header,Mount,Fuse,我现在正在做一个项目,需要从远程服务器上的文件读取头数据。我说的是很多很大的文件,所以我不能读取整个文件,只能读取我需要的头数据 我唯一的解决方案是用fuse挂载远程服务器,然后从文件中读取头文件,就像它们在本地计算机上的位置一样。我试过了,效果很好。但它也有一些缺点。特别是FTP: 速度非常慢(FTP与SSH和FTPFS相比)。从同一台服务器上,用SSH在18秒内读取了90个文件。用FTP在39秒内传输10个文件 不可靠。有时装载点不会卸载 如果服务器处于活动状态,并且已完成被动装载。装载点

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

我唯一的解决方案是用fuse挂载远程服务器,然后从文件中读取头文件,就像它们在本地计算机上的位置一样。我试过了,效果很好。但它也有一些缺点。特别是FTP:

  • 速度非常慢(FTP与SSH和FTPFS相比)。从同一台服务器上,用SSH在18秒内读取了90个文件。用FTP在39秒内传输10个文件
  • 不可靠。有时装载点不会卸载
  • 如果服务器处于活动状态,并且已完成被动装载。装载点和父文件夹将在大约3分钟内锁定
  • 超时,即使数据传输正在进行(猜测这是FTP协议,而不是FTPFS)
Fuse是一个解决方案,但我不太喜欢它,因为我觉得我不能信任它。所以我的问题基本上是这个问题是否还有其他解决方案。语言最好是Ruby,但如果Ruby不支持该解决方案,任何其他语言都可以使用


谢谢

你在寻找什么类型的信息

您可以尝试使用ruby的开放uri模块。 以下示例来自

需要“打开uri”
打开(“http://www.ruby-lang.org/en“{| f|
p f.base_uri#
p f.content_type#“text/html”
p f.charset#“iso-8859-1”
内容编码
p f.last#u modified#Thu Dec 05 02:45:02 UTC 2002
}
编辑:op似乎想从远程文件中检索ID3标记信息。这更为复杂

从维基: 这似乎是一个难题

在wiki上:

文件中的标记位置

只有ID3v2.4标准才有 可以将标记数据放置在 文件的结尾,与 ID3v1。ID3v2.2和2.3要求 标记数据位于文件之前。同时 对于流式数据,这是绝对必要的 必需,对于静态数据,它意味着 整个音频文件必须 已更新,以在的前面插入数据 档案。对于初始标记,请执行以下操作: 由于每个文件 必须重写。标签作者是 鼓励在之后引入填充 标记数据,以便允许 编辑标记数据时不使用 要求将整个音频文件 重新编写,但这些不是标准的 标签要求可能会有所不同 极大地,特别是如果APIC (相关图片)也是 嵌入式

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

这里有一篇文章概述了使用ruby for ID3tagv1.1读取ID3标记的基础知识,但应该将服务器作为一个良好的起点:


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

有一个建议,只允许检索部分文件(这里是第一个字节)

然而,我没有发现任何关于纳入该提案或实施的参考

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

一个“一无所获”的解决方案是启动传输,并在加载的文件超过字节时停止传输。由于允许中断连接的库不多(如果有的话),因此更为复杂,可能需要您手动编写特定的ftp客户端代码,其中包含两个线程,一个线程进行ftp连接和传输,另一个线程监视下载文件的大小并终止第一个线程


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

我想访问音乐文件的标签信息。例如ID3。OpenURI似乎不能给我这样的信息。
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
}