如何使用 file: 方案在 html 中指定本地文件?

Posted

技术标签:

【中文标题】如何使用 file: 方案在 html 中指定本地文件?【英文标题】:How to specify a local file within html using the file: scheme? 【发布时间】:2012-09-24 13:31:26 【问题描述】:

我正在加载一个托管在 OS X 内置 Apache 服务器上的 html 文件,在该文件中我链接到同一目录中的另一个 html 文件,如下所示:

<a href="2ndFile.html"><button type="submit">Local file</button>

这行得通。但是(由于太长的原因无法进入)我正在尝试使用 file: 方案,但是我无法得到任何工作。这是我使用文件重写上述行的方式:

<a href="file://192.168.1.57/~User/2ndFile.html"><button type="submit">Local file</button>

(192.168.1.57是我当前的IP地址)

将其更改为以下内容也不起作用:

<a href="file://Name-Of-MacBookPro/~User/2ndFile.html"><button type="submit">Local file</button>

但是找不到文件,应该如何使用file:scheme指定呢?

【问题讨论】:

除非我遗漏了什么,file:// 指向客户端机器上的一个文件......所以如果你试图获取服务器上的一个文件,你应该继续使用 HTTP.. . 【参考方案1】:

file: URL 方案引用客户端计算机上的文件。 file: 方案中没有主机名;您只需提供文件的路径。因此,您本地计算机上的文件将是file:///~User/2ndFile.html。注意三个斜线; URL 的主机名部分为空,因此路径开头的斜杠紧跟 URL 开头的双斜杠。您还需要扩展用户的路径; ~ 不会在 file: URL 中扩展。所以你需要file:///home/User/2ndFile.html(在大多数 Unix 上)、file:///Users/User/2ndFile.html(在 Mac OS X 上)或file:///C:/Users/User/2ndFile.html(在 Windows 上)。

出于安全原因,许多浏览器不允许从服务器加载的文件链接到本地​​文件。因此,您可能无法从通过 HTTP 加载的页面执行此操作;您可能只能从其他本地页面链接到 file: 网址。

【讨论】:

如何在Windows上使用相对路径代替C://? 要使用相对路径,您只需包含相对路径,没有任何file: 方案或//。所以如果你有一个文件index.html,并且想在同一个目录中引用other_file.html,你可以直接链接到other_file.html,没有scheme。 @Brian 那么有没有办法下载像 file:///home/User/2ndFile.html 这样的本地文件?我想知道是否有任何替代方案可用?【参考方案2】:

“文件”协议不是网络协议。因此 file://192.168.1.57/~User/2ndFile.html 根本没有多大意义。

问题是如何加载第一个文件。这真的是使用网络服务器完成的吗?听起来不像。如果是,那么为什么不使用相同的协议,很可能是 http?您不能期望简单地切换协议并以相同的方式使用两种不同的协议...

我怀疑第一个文件确实是使用 apache 服务器加载的,但只是通过打开文件? href="2ndFile.html" 之所以有效,是因为它使用“相对 url”。这使得浏览器使用与他获取第一个(当前)文件的位置相同的协议和路径。

【讨论】:

第一个文件由客户端应用程序加载,我使用 file:// 的原因是我正在尝试一些安全性的东西,看看第一个文件是否可以使用 file: //. 嗯,这一切都很好(你说的很少)。但是如果你使用文件协议,这与 apache 没有任何关系。 Apache 是一个 http 服务器。【参考方案3】:

“file://”url 协议只能用于在本地机器的文件系统中定位文件。由于此 html 代码由浏览器解释,因此“本地机器”是运行浏览器的机器。

如果您收到文件未找到错误,我怀疑是因为未找到文件。但是,它也可能是浏览器的安全限制。某些浏览器不允许您从非文件系统 html 页面引用文件系统文件。您可以尝试在运行浏览器的机器上使用命令行中的文件路径来确认这是浏览器限制,而不是合法的丢失文件。

【讨论】:

【参考方案4】:

我之前遇到过类似的问题,在我的情况下,文件在另一台机器上 所以我已将网络驱动器 z 映射到我的文件所在的文件夹位置 然后我在tomcat中创建了一个上下文 所以在我的网络项目中,我可以通过上下文访问 HTML 文件

【讨论】:

您是否检查过您提出的解决方案是否有效?如果没有,我建议您不要发布答案,因为它可能会误导其他人。 是的很久以前对我有用..编辑我的评论以获取更多详细信息 这应该可以file://///ComputerNameOnNetwork/DriveLetter/index.html【参考方案5】:

对于 apache 查找 SymLink 或者您可以通过带有符号链接的操作系统或在 linux 上设置库链接/等来解决

我的回答是专门针对 Windows 10 的一种方法。

所以我的方法涉及将网络驱动器映射到 U:/(例如,我使用 G:/ 表示 Google Drive)

打开 cmd 并输入 hostname(示例结果:LAPTOP-G666P000,您可以改用您的 ip,但如果您的网络停止,使用静态主机名来识别您自己更有意义)

Windows_key + E > right click 'This PC' > 按N (这是地图网络驱动器,不是添加网络位置)

如果你是右键桌面上的快捷方式你需要按N然后回车

填写U:G:Z:或任何你想要的 示例地址:\\LAPTOP-G666P000\c$\Users\username\

然后你可以在你的问题中使用&lt;a href="file:///u:/2ndFile.html"&gt;&lt;button type="submit"&gt;Local file&lt;/button&gt;


相关:您也可以将此方法用于 FTP,并为同一网络上的不同相对路径设置多个驱动器。

related2:我之前也曾在一些 WAMP/apache 服务器上使用过 http://localhost/c$ 等,您可以使用 .htaccess 进行控制/安全,但我建议不要在实时/生产机器或任何其他机器上这样做符号链接 documentroot 示例,您可以 google

【讨论】:

以上是关于如何使用 file: 方案在 html 中指定本地文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 Gemfile 中指定本地 gem?

如何在 xsd 文件中指定架构位置?

java怎么读取文档中指定内容

如何在流星包中指定本地 npm 模块

Google Dataflow - 如果写入本地服务器,如何在 java 中指定 TextIO?

在 FireMonkey TWebBrowser 中指定 IP 地址