从链接打开本地文件夹

IT技术 javascript html
2021-02-05 02:24:06

如何通过单击任何链接打开本地文件夹视图?

我尝试了很多选择,比如

<a href="file:///D:/Tools/">Open folder</a> 或者

<a onclick="file:///D:/Tools/">Open folder</a> 或者

<a onclick="window.open(file:///D:/Tools/)">Open folder</a>

6个回答

解决方案:启动可下载链接

以下适用于所有浏览器,但一如既往地有警告。

背景:

“URL 快捷方式”取决于操作系统。由于环境之间缺乏标准,以下解决方案适用于 MS Windows。

如果您需要以下解决方案的 linux 支持,请参阅此文章
* 我与这篇文章没有任何关系,YMMV。

URL 快捷方式有两种形式:

  1. 带有 .URL 扩展名的文件是基于文本的。可以动态生成。

    [互联网快捷方式]
    URL=file:///D:/

  2. 带有 .LNK 扩展名的文件是二进制文件。它们可以动态生成,但需要 iShelLinkInterface 实现者。默认操作系统限制使这变得复杂,这理所当然地阻止了 IIS 进程访问 Shell。

.URL 是推荐的解决方案,因为动态生成跨 Web 语言/框架是可行的,并允许 KISS 实现。


概述/回顾:

  1. 安全限制不允许您直接从页面打开路径/启动资源管理器(如@Pekka 所述)。
  2. 外部托管的站点(不在您的本地计算机上)将不允许 file:///... uri 在默认安全权限下。

解决方案:

提供资源的可下载链接(.URL 或 .LNK)。浏览器行为将在帖子末尾解释。

选项 1:生成 .lnk 文件并将其保存到服务器。由于 .LNK 文件的二进制性质,这不是推荐的解决方案,但预先生成的文件应该是可行的。

选项 2:生成 .url 文件并将其保存到服务器或动态生成它。在我的情况下,我正在动态创建 .URL 文件。


解决方案详细信息 (.URL):

  1. 将 .url 添加到 Web 服务器中可用的 MIME 类型。

    对于 IIS 打开站点,选择 MIME 类型,并添加以下内容:

    文件名扩展名= .url
    MIME 类型:application/internet-shortcut

    每 @cremax ... 对于 Webkit 浏览器(如 Apache 服务器上的 Chrome),将此代码添加到 .htaccess 或 http.config:

    SetEnvIf Request_URI ".url$" requests_url=url 头部添加 Content-Disposition "attachment" env=requested_url

  2. .url 文件是一个文本文件,格式如下(同样,这可以动态生成)。

    文件内容:

    [互联网快捷方式]
    URL=file:///D:

  3. 提供指向生成 .url 文件的脚本或文件本身的链接。

    如果您只是将 .url 文件上传到您的服务器,请将以下内容添加到您的 HTML 中:

    <a href="URIShortcut.url">Round-About Linking</a>


浏览器相关行为

Chrome:下载/保存 file.url 然后打开
在 Chrome 中,可以通过选择“始终打开此类型的文件”选项来增强此行为。

FireFox:下载/保存 file.url 然后打开

Internet Explorer : 点击“打开”并直接进入目录(无需保存快捷方式)

Internet Explorer 具有首选行为,但 Chrome 和 Firefox 至少可以使用。

这对我有用,“SetEnvIf Request_URI“.url$”requested_url=url Header add Content-Disposition“attachment”env=requested_url”是我让它在Chrome中工作所需要的。
2021-03-29 02:24:06
@MrLore 是正确的。理想情况下,不应保留快捷方式(即,最终用户应该不知道需要删除下载的链接。)我知道完成此操作的唯一方法是通过 IE 保存到 IETemp 的行为并允许用户选择打开/ 下载时运行(与保存)。如果我重新审视这个并且能够想出更好的东西,我会回帖。
2021-03-30 02:24:06
应该注意 [InternetShortcut] 选项,一旦它为您提供下载或保存的选项,您的浏览器就无法判断您已经拥有该文件并且它将复制到您的临时目录中,因此请注意这样做与大文件。
2021-04-03 02:24:06
嗨@Utkanos,这可能是Apache 编码/发送文件的方式或浏览器的文件关联。您是否尝试过 cremax 的配置 Apache 说明?PS:使用@符号+姓名,此人将收到您的消息通知。
2021-04-06 02:24:06
我只是偶然发现了这个解决方案,但我发现我的浏览器只是打开 .url 文件并显示其文本。我在本地的 XAMPP 上。我是否需要以某种方式告诉 XAMPP 以不同方式解释这些 .url 文件?
2021-04-10 02:24:06

由于安全限制,所有现代浏览器都禁止链接到本地​​资源。

对于火狐

出于安全目的,Mozilla 应用程序会阻止从远程文件到本地文件(和目录)的链接。这包括链接到硬盘驱动器、映射网络驱动器上的文件,以及通过统一命名约定 (UNC) 路径访问的文件。这可以防止许多不愉快的可能性,包括:

  • 允许站点通过检查默认安装路径来检测您的操作系统
  • 允许站点利用系统漏洞(例如,Windows 95/98 中的 C:\con\con)
  • 允许站点检测浏览器首选项或读取敏感数据

对于IE

Internet Explorer 6 Service Pack 1 (SP1) 不再允许从 Internet 区域浏览本地计算机。例如,如果 Internet 站点包含指向本地文件的链接,则当用户单击该链接时,Internet Explorer 6 SP1 会显示一个空白页面。以前版本的 Windows Internet Explorer 遵循本地文件的链接。

对于Opera(在安全公告的上下文中,我确定有一个更规范的链接):

作为安全预防措施,Opera 不允许网页链接到用户本地磁盘上的文件

但是我可以通过 URL 中的“file:///D:/Tools/”浏览 Mozilla 和 IE 中的本地文件和目录。我使用 Mozilla 3.6 和 IE 8。如果我对锚标记使用相同的 URL,它不会打开文件和文件夹
2021-03-23 02:24:06
@Satya 是的,这正是安全机制应该​​工作的方式 - 防止来自远程站点的恶意链接
2021-03-31 02:24:06
@Odelya 我不知道确切的来源,但根据经验,Chrome 对本地资源的处理与 Firefox 一样严格。
2021-04-07 02:24:06

仅适用于 IE6-8 - JavaScript 中有一个 ActiveX 解决此本地文件问题:

        function OpenImage(filePath)
        {
            var myshell = new ActiveXObject("WScript.shell");
            myshell.run(filePath, 1, true); 
        }
-1:如果 ActiveX 被禁用(在大多数情况下是这样),则效果不佳。
2021-03-18 02:24:06
@JohnSaunders:我已经在许多 Intranet Web 应用程序中看到了此功能,并为特定网站的 Local-Intranet 进行了适当的配置(例如 [http://coName-net])
2021-03-22 02:24:06

您可以使用

<a href="\\computername\folder">Open folder</a>

在 Internet Explorer 中

添加点击打开本地目录o本地文件到谷歌浏览器:

JFish222 的解决方案有效(URL 文件解决方案)

对于 Apache 服务器上的 Chrome 等 Webkid 浏览器,只需将以下代码添加到 .htaccess o http.config 中:

SetEnvIf Request_URI ".url$" requests_url=url 头部添加 Content-Disposition "attachment" env=requested_url

并通过您的 url 文件的第一个下载点击 chromes 下载栏中的文件并选择“始终打开此文件”。