如何从网络客户端/服务器打开本地文件

时间:2021-01-21 07:50:00

标签: c# asp.net angular typescript google-chrome

我正在尝试在项目中添加一个链接,该链接将打开解释如何使用该系统的教程。 本教程仅与在公司工作的人员相关,因此我认为最好将本教程放在我们公司的网络驱动器上,并且仅从 Web 客户端重定向到此文件。这样,无需重新上传系统即可轻松更改教程。

问题似乎是 chrome 阻止我从 Web 客户端打开本地文件。

但如果我没记错的话,有一些网站可以打开本地 pdf 文件。那为什么我打不开教程呢?它基本上是一个演示文稿(我认为是 flash,不是很重要),您可以通过打开 html 文件来打开它。

是否有任何替代解决方案? 如果 chrome 会询问用户是否确定他想要打开文件或类似的东西,我也可以。 但我不想将文件直接添加到我的项目代码中,因为它需要重新上传整个项目才能仅更新教程。

我在后端使用 ASP.NET Framework,在前端使用 Angular。

1 个答案:

答案 0 :(得分:-1)

没有大脑的人会使用可以打开本地文件的浏览器。你的意思是你来我的网站看猫视频,而浏览器一直在打开你的银行文件或窃取标有“我的密码?”的 Excel 表。差远了!浏览器无法打开本地文件期间!!!安全风险很高。

您当然可以将文件夹暴露给 Web 服务器,然后该文件夹中的任何文件都会成为网站的一部分,更重要的是成为 Web 服务器“URL”映射的一部分。

因此,您可以拥有自己的典型站点(例如 inetpup\wwwroot。在该文件夹中,仅允许使用指向该网站文件夹中文件的有效网址。

并且假设您的网络上有一个装满文件的大型文件服务器?那么,您可以向站点添加所谓的虚拟文件夹。

所以,假设网站已开启 c:\inetpub\wwwroot

因此,用户(或您启动网页的代码)在 a 中输入的任何有效 URL 现在都是

http://mysite/default.aspx

上面的文件当然映射到 c:\inetpub\wwwroot\Default.aspx。

那么,假设您在网络上有一个文件夹,里面装满了您希望用户查看/查看/使用的 pdf 文件?

好吧,假设该文件夹是: \SERVER5\PpdFileArcive。

因此,该文件夹不是网站的一部分。您所做的是向 asp.net 站点添加一个虚拟文件夹。让我们称之为 MyPdfs

您将 MyPdfs 映射到上面的 \SERVER5\PdfFileArchive

所以,现在你的 URL 变成了这样: http://mysite/MyPdf/help.pdf

因此,浏览器无法查看您计算机上的本地文件(您真的认为我的网站可以在您的本地计算机上翻找吗?不是!!!!)。

因此您可以在本地网络上放置一些文件夹。如果网站在同一网络上,那么您可以向网站添加一个虚拟文件夹。然后,该“外部”文件夹将成为网站的一部分并映射到网络“URL”,然后您就可以说拥有超链接,甚至允许用户输入任何网址,例如:

http://mysite/MyPdf/HowToCookPotatos.pdf

事实上,在很多情况下,您不希望用户输入网址,而且通常您也不希望用户能够输入网址。

好吧,请记住,后面的代码(在 Web 服务器上运行的 .net 代码)实际上与 .net 桌面代码相同。背后的代码可以打开/读取/使用网络上任何地方的任何文件——包括桌面上的文件。但这将假设 Web 服务器与您在同一网络上,并且假设即使在任何计算机上运行的桌面程序也有权访问您的桌面文件夹。 (这不是默认设置 - 我认为大多数桌面都有一个共享的公用文件夹)。

因此,该 Web 服务器上的代码可以打开、读取/处理任何文件。但是您不能说使用超链接或说有效的 URL 来获取这些文件。

因为一家公司通常不想将那个巨大的 pdf 文件夹暴露给疯狂的互联网?那么常见的做法是您不创建虚拟文件夹,也不将 URL 映射到该内部公司文件夹。您拥有 OPEN + READ 背后的代码,然后将文件向下传输到浏览器。您可以谷歌搜索并找到 100 个示例 - 只需谷歌将 pdf 流式传输到浏览器即可了解其工作原理。但同样,请记住,这个技巧/建议仍然仅限于在服务器上运行的代码能够直接访问和打开位于文件夹中的文件。只要 Web 服务器有权读取/打开/使用此类文件,该文件就可以位于网络上的任何位置。该网站的用户将无法输入任何可能的 URL,但如果背后的代码具有此类权限或能够打开此类文件,则可以编写 Web 代码以“分发”或所谓的“流”该文件到浏览器。

因此请记住 Web URL(有效的 Web 路径名)的概念,以及其背后的代码不使用 URL 打开和读取文件的概念 - 但您使用平面 jane 常规 Windows 文件路径名。

当然,如果您有一个虚拟文件夹和一个暴露给最终用户的 URL,那么 STILL 背后的代码通常需要处理/打开/复制或对用户输入的 URL 执行任何操作。这就是 server.mapPath 的用武之地。它将 URL 值转换为完整的内部路径名。

所以 后面的代码 = 总是需要一个完整的有效 Windows 路径名。 URL -web 文件夹(包括指向服务器文件夹的虚拟文件夹)。这些 URL 可用于超链接、网络导航,甚至允许用户输入该文件夹中给定 pdf 的完整 URL(但用户将输入可解析到该文件夹​​的有效 URL)。< /p>

因此,虽然您不能出于所有实际目的在您的计算机上使用浏览器读取/获取/使用本地文件?您可以在某些服务器(甚至是 Web 服务器)上设置一个文件夹,其中包含所有这些 pdf、图片或您想要的任何内容。有了映射的虚拟文件夹,Web 用户就可以使用这些文件了。

或者,如果您想保持锁定状态,不希望用户输入可能不属于他们的文件的 URL?然后,您当然可以在数据库或其他任何内容中维护一个文件列表。后面的代码可以使用完整有效的内部路径名直接 100% 读取此类文件,然后将该文件推送(流)给用户。

以下是此类代码的示例: Stream PDF to browser?