正确格式化文件协议中的文件URI

时间:2016-01-13 16:59:18

标签: windows macos file uri protocols

所以我试图找出在不同系统上使用抓取文件时要使用的适当数量的斜杠。

我知道正确的格式为file://hostname/pathhttps://en.wikipedia.org/wiki/File_URI_scheme#Format)。

由于我只使用文件localhost,因此省略了主机,但是将主机名与路径的其余部分分开的斜杠仍然是 file:///[path]这一切都很好,而且很容易找到。

然而,当在OS​​X机器上使用相同的软件时,我不知道如何正确格式化URI,因为据我所知,斜杠表示根 (http://www.westwind.com/reference/OS-X/paths.html) 这将使格式正确:

file://localhost//[path from root]

省略主机名给了我 file:////[path from root] 我不能为我的生活找到任何一个例子,即使我可以很容易地找到人们在mac环境中使用三个闪光的例子(这应该是不正确的?)。

在我的情况下,两种解决方案似乎都有效,但这可能是由于“不正确”这一事实导致的。一个人在没有我的知识的情况下被改变成一个正确的人,我不相信这会发生在其他地方。 所以,请有人向我展示这个,哪一个是正确的?

如果问题不好或属于其他地方,请告诉我。

1 个答案:

答案 0 :(得分:1)

我猜你是否需要第一个' /' URL中的字符是必需的。答案可以在3.10 of RFC 1738部分找到:

  

文件URL方案用于指定可访问的文件   特别是主机。与大多数其他URL方案不同,此方案   没有指定一个普遍可访问的资源   因特网。

     

文件网址采用以下格式:

   file://<host>/<path>
     

其中&lt; host&gt;是系统的完全限定域名   其中&lt; path&gt;是可访问的,&lt; path&gt;是一个分层的   表单的目录路径&lt; directory&gt; /&lt; directory&gt; /.../& lt; name&gt;。

     

例如,VMS文件

 DISK$USER:[MY.NOTES]NOTE123456.TXT
     

可能会成为

 <URL:file://vms.host.edu/disk$user/my/notes/note12345.txt>
     

作为特例,&lt; host&gt;可以是字符串&#34; localhost&#34;或者   空字符串;这被解释为`机器从哪里来的   URL正在被解释&#39;。

     

文件URL方案不常见,因为它没有指定
  用于此类文件的Internet协议或访问方法;因此,它的   主机间网络协议的效用是有限的。

文件URL方案的工作方式与所有网络网址相同。主机规范在另一个RFC中处理。 VMS示例使用非标准的磁盘/用户说明符。但是,在大多数操作系统(windows,unix,machos)中,一些参数是隐式,因此是空字符串:

完全限定的文件网址如下所示:

文件://用户:密码@主机/路径/到/文件

用户,密码和主机通常都是当前登录用户和localhost隐含的(除非文件系统允许用户在URL中指定权限)。协议说明符(file://)之后的所有内容都是 relative 到(当前或指定)主机上的(指定或隐式)用户。如果从URL中删除协议,用户和主机信息,则会留下标准(unix)路径。鉴于您对路径的了解,您可以以相同的方式对待它们(并且正确地假设您的操作系统也会这样做):

  1. 带有前面斜杠的路径是用户/主机的绝对路径来自已安装的根目录,基本上是文件系统层次结构中可见的最高级别程序作为当前用户在当前主机上运行:/path/to/file

  2. 没有前面斜杠的路径是来自程序 当前工作目录相对路径。 path/to/file

  3. 因此,您的文件URL应该与在程序或shell脚本中指定路径的方式相同:

    绝对:file:///path/to/file 亲戚:file://path/to/file

    实际上,通过使用绝对定义的基目录并在转换为URL之前附加相对路径,在运行时将所有路径转换为绝对路径始终是明智的。建议不要在机器之间传递文件URL,也不建议在目录可能更改的网络安装文件系统上使用文件URL,或者可以将文件URL安装到动态位置(例如使用automount)。它们只应用于用户定义的位置或众所周知的跨主机文件系统位置。