如何在本地运行的网页上创建指向本地文件的链接?


155

我想要一个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。

Answers:


259

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

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

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

许多浏览器的现代版本(例如Firefox和Chrome)将拒绝从http协议过渡到文件协议,以防止恶意行为。如果您完全想做这些事情,则需要使用文件协议在本地打开网页。

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

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

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

您的浏览器可能不会认为它引用的是本地文件。没有什么理由做这个假设,因为公共站点通常不尝试链接到人们的本地文件。

因此,如果要访问本地文件:告诉它使用文件协议。

为什么三个斜杠?

因为它是File URI scheme的一部分。您可以选择在前两个斜杠后指定主机。如果跳过指定主机,则仅假设您正在引用自己PC上的文件。这file:///C:/etc是的捷径file://localhost/C:/etc

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

您的浏览器将对这些文件的响应与对Internet上任何地方的相同文件的响应相同。这些文件将不会在默认文件处理程序(例如MS Word或VLC Media Player)中打开,并且您将无法执行任何操作,例如要求File Explorer打开文件的位置。

对于您的安全而言,这是一件非常好的事情。

浏览器中的站点无法很好地与操作系统交互。如果一个好的网站可以告诉你的机器开lecture.mp4VLC.exe,恶意网站可以告诉它打开virus.bat的CMD.exe。或者它可能只是告诉您的计算机运行一些Uninstall.exe文件或打开File Explorer一百万次。

这可能对您来说并不方便,但是HTML和浏览器的安全性并不是真正针对您的工作而设计的。如果您希望能够打开lecture.mp4VLC.exe考虑编写一个桌面应用程序来代替。


1
谢谢乔纳森。您知道是否有一种方法可以“显示文件夹中的文件”吗?
Brian Fitzpatrick

7
@Brian您的浏览器无法以这种方式与您的操作系统进行交互,因此您应该感到非常高兴,因为它不能。
doppelgreener

23
Chrome似乎无论如何都不会使用file:///协议下载本地文件(给您一个Not allowed to load local resource错误)
Loupax 2014年

1
我想提供一个像这样的链接“ file:/// .. \ .. \ sort.mw”,以便它返回两个文件夹并在那里保存文件。因为我们在Dropbox中使用Word文件。有什么解决办法吗?
Murtaza Munshi 2015年

5
还可能值得一提的是,您无法从网站(例如本地开发服务器)链接到本地​​文件。forums.mozillazine.org/viewtopic.php?f=9&t=1730
nuala

14

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

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

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

希望这可以帮助某人:)


感谢您的回答!我已经将file:///放在文件的路径之前,但是当我单击它时什么也没发生。我必须使用Ctrl(在新标签页中)打开它。为什么会这样呢?
PiotrCzyż2015年

5

充其量

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

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


我们被迫右击吗?是否存在一种方法,只需单击它即可?
Bandoleras

1

回到2017年:

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

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


这里的file参数需要在浏览器客户端的JS运行时内部构造的实际文件对象,这意味着我们必须已经将其上传到浏览器客户端(例如,通过文件上传表单控件)。生成的URL是一个Blob URL,用于下载或引用浏览器客户端的JS运行时内部存储器中存储的副本。这对创建到本地文件的链接没有帮助;它是指向存储在内存中的副本的链接(否则,一旦我们尝试访问它,其行为就不会有所不同)。
doppelgreener

正是我所需要的。使用文件输入来选择文件,然后使用createObjectURL在选项卡中将其打开。
托尼·拉格

0

我有办法这样工作:

<'a href="FOLDER_PATH" target="_explorer.exe">Link Text<'/a>

即使在Internet Explorer中,这看起来也不是有效的目标值。
doppelgreener

IE忽略(无效)目标(以上)。以下可以在IE10、11上正常工作:<a href="C:/tmp">链接到驱动器C上的tmp。</a>
primehunter

它对我来说效果很好,使用IE和网络驱动器路径(例如“ file:// servername / path \ to \ folder”)代替FOLDER_PATH。如果省略“ target =“ _ explorer.exe””,则该文件夹将在IE中打开,而不是在explorer.exe中打开,它看起来很像explorer。
JonP
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.