182

我想要一个 html 文件来组织分散在我的硬盘上的某些文件。例如,我有两个要链接到的文件:

  • C:\Programs\sort.mw
  • C:\Videos\lecture.mp4

问题是我希望链接充当文件的快捷方式。我尝试了以下方法:

<a href="C:\Programs\sort.mw">Link 1</a>
<a href="C:\Videos\lecture.mp4">Link 2</a>

...但第一个链接什么也不做,第二个链接在 Chrome 中打开文件,而不是 VLC。

我的问题是:

  1. 有没有办法调整我的 HTML 以将链接视为文件的快捷方式?

  2. 如果没有办法调整 HTML,有没有其他方法可以巧妙地链接到分散在硬盘上的文件?

我的电脑运行 Windows 7,我的网络浏览器是 Chrome。

4

5 回答 5

297

file:///如果要链接到本地​​文件,则需要使用协议(是的,这是三个斜线)。

<a href="file:///C:\Programs\sort.mw">Link 1</a>
<a href="file:///C:\Videos\lecture.mp4">Link 2</a>

这些将永远不会自动在您的本地应用程序中打开文件。这是出于安全原因,我将在最后一节中介绍。如果它打开,它只会在浏览器中打开。如果您的浏览器可以显示该文件,它就会显示,否则它可能会询问您是否要下载该文件。

您不能从 http(s) 跨到文件协议

许多浏览器的现代版本(例如 Firefox 和 Chrome)将拒绝从 http(s) 协议跨到文件协议以防止恶意行为。

这意味着托管在某个网站上的网页将永远无法链接到您硬盘上的文件。如果你想要做这些事情,你需要使用文件协议在本地打开你的网页。

为什么没有它会卡住file:///

URL 的第一部分是协议。协议是几个字母,然后是一个冒号和两个斜杠。HTTP://并且FTP://是有效的协议;C:/不是,我很确定它甚至不像一个。

C:/也不是有效的网址。浏览器可能会假设它http://c/指定了一个空白端口,但这会失败。

您的浏览器可能不会假定它指的是本地文件。几乎没有理由做出这种假设,因为网页通常不会尝试链接到人们的本地文件。

所以如果你想访问本地文件:告诉它使用文件协议。

为什么是三个斜线?

因为它是File URI scheme的一部分。您可以选择在前两个斜杠之后指定主机。如果您跳过指定主机,它只会假定您指的是您自己 PC 上的文件。这意味着file:///C:/etcfile://localhost/C:/etc.

这些文件仍将在您的浏览器中打开,这很好

您的浏览器将响应这些文件,就像它们响应 Internet 上任何地方的相同文件一样。这些文件不会在您的默认文件处理程序(例如 MS Word 或 VLC 媒体播放器)中打开,并且您将无法执行任何操作,例如让文件资源管理器打开文件的位置。

这对您的安全来说是一件非常好的事情。

您浏览器中的站点无法与您的操作系统很好地交互。如果一个好的站点可以告诉您的机器在 VLC.exe 中打开Lecture.mp4 那么恶意站点可以告诉它在CMD.exe中打开virus.bat。或者它可能只是告诉您的机器运行几个Uninstall.exe文件或打开文件资源管理器一百万次。

这对您来说可能不方便,但 HTML 和浏览器安全性并不是真正为您正在做的事情而设计的。如果您希望能够在VLC.exe 中打开 Lecture.mp4 请考虑编写一个桌面应用程序。

于 2013-08-15T04:31:51.737 回答
15

如果您在 PC 上运行 IIS,您可以将尝试访问的目录添加为虚拟目录。为此,您在 ISS 中右键单击您的站点,然后按“添加虚拟目录”。命名虚拟文件夹。将虚拟文件夹指向本地 PC 上的文件夹位置。您还必须提供有权访问特定文件夹的凭据,例如。主机名\用户名和密码。之后,您可以像访问站点上的任何其他文件一样访问虚拟文件夹中的文件。

http://sitename.com/virtual_folder_name/filename.fileextension

顺便说一句,这也适用于 Chrome,否则不接受文件协议 file://

希望这可以帮助某人:)

于 2015-01-27T12:07:27.190 回答
7

Janky 充其量

<a href="file://///server/folders/x/x/filename.ext">right click </a></td>

然后右键单击,选择“复制位置”选项,然后粘贴到 url。

于 2015-04-24T01:25:33.470 回答
3

回到 2017 年:

使用URL.createObjectURL( file )创建用户选择的文件系统的本地链接;

不要忘记使用URL.revokeObjectURL()释放内存

于 2017-01-15T14:08:15.167 回答
0

我有这样的方法和工作:

<'a href="FOLDER_PATH" target="_explorer.exe">Link Text<'/a>
于 2016-10-12T08:04:03.490 回答