没有脑子的人会使用可以打开本地文件的浏览器。你的意思是你来我的网站看猫视频,而浏览器一直在打开你的银行文件或窃取标有“我的密码?”的 Excel 表。差远了!浏览器无法打开本地文件期间!!!有很高的安全风险。
您当然可以将文件夹暴露给网络服务器,然后该文件夹中的任何文件都成为网站的一部分,更重要的是成为网络服务器“URL”映射的一部分。
因此,您可以拥有您的典型站点(例如 inetpup\wwwroot。在该文件夹中,然后只允许指向该网站文件夹中文件的有效 URL。
假设您的网络上有一些大型文件服务器,里面装满了文件?那么,您可以在站点中添加所谓的虚拟文件夹。
所以,假设网站在
c:\inetpub\wwwroot
因此,用户输入的任何有效 URL(或您启动网页的代码)现在都是
http://mysite/default.aspx
上面的文件当然映射到
c:\inetpub\wwwroot\Default.aspx.
那么,假设您在网络上有一个文件夹,里面装满了您希望用户查看/查看/使用的 pdf 文件?
好吧,假设该文件夹是:
\SERVER5\PpdFileArcive。
因此,该文件夹不是网站的一部分。您所做的是向 asp.net 站点添加一个虚拟文件夹。让我们称之为 MyPdfs
您将 MyPdfs 映射到上面的 \SERVER5\PdfFileArchive
所以,现在您的网址变成了这样:
http://mysite/MyPdf/help.pdf
因此,浏览器无法查看您计算机上的本地文件(您是否真的认为我的网站可以在您的本地计算机上翻阅?不是!!!!)。
因此,您可以在本地网络上放置一些文件夹。如果网站在同一个网络上,那么您可以向该网站添加一个虚拟文件夹。然后,该“外部”文件夹将成为网站的一部分并映射到一个网络“URL”,然后允许您说具有超链接,甚至允许用户输入任何 url,例如:
http://mysite/MyPdf/HowToCookPotatos.pdf
事实上,在许多情况下,您不希望用户输入 URL,而且通常您不希望用户能够输入 url。
请记住,背后的代码(在 Web 服务器上运行的 .net 代码)实际上与 .net 桌面代码相同。后面的代码可以在网络上的任何地方打开/读取/使用任何文件——包括桌面上的文件。但这会假设 Web 服务器与您位于同一网络上,并且假设即使在任何计算机上运行的桌面程序也有权访问您的桌面文件夹。 (这不是默认设置 - 我认为大多数桌面都有一个共享的公用文件夹)。
因此,该网络服务器上的代码可以打开、读取/处理任何文件。但是你不能说使用超链接,或者说一个有效的 URL 来获取这些文件。
因为公司经常不想将那个巨大的 pdf 文件夹暴露在疯狂而疯狂的互联网上?那么常见的做法是您不创建虚拟文件夹,也不将 URL 映射到该内部公司文件夹。您有 OPEN + READ 后面的代码,然后将文件流式传输到浏览器。您可以通过 Google 搜索并找到 100 个示例 - 只需通过 Google 将 pdf 流式传输到浏览器即可了解其工作原理。但同样,请记住,这个技巧/建议仍然仅限于在服务器上运行的代码,能够直接访问和打开位于文件夹中的文件。只要网络服务器有权读取/打开/使用此类文件,该文件就可以位于网络上的任何位置。该网站的用户将没有任何可能的 URL 输入,但如果背后的代码具有此类权限或打开此类文件的能力,则可以编写 Web 代码以“输出”或所谓的“流”该文件到浏览器。
因此请记住 Web URL(有效的 Web 路径名称)的概念,以及不使用 URL 来打开和读取文件的代码背后的概念 - 但您使用平面简常规 Windows 文件路径名称。
当然,如果您有一个虚拟文件夹和一个向最终用户公开的 URL,那么 STILL 背后的代码通常需要处理/打开/复制或对用户输入的 URL 执行任何操作。这就是 server.mapPath 的用武之地。它会将 URL 值转换为完整的内部路径名。
所以
Code behind = ALWAYS 需要一个完整有效的 Windows 路径名。
URL -web 文件夹(包括指向服务器文件夹的虚拟文件夹)。这些 URL 可用于超链接、Web 导航,甚至允许用户输入该文件夹中给定 pdf 的完整 URL(但用户将输入解析为该文件夹的有效 URL)。
因此,虽然您不能出于所有实际目的让浏览器在您的计算机上读取/获取/使用本地文件?您可以在某些服务器(甚至网络服务器)上设置一个文件夹,其中包含所有这些 pdf、图片或任何您想要的内容。有了映射的虚拟文件夹,Web 用户就可以使用这些文件。
或者,如果您想保持锁定状态,不希望用户输入可能不属于他们的文件的 URL?然后,您当然可以维护一个文件列表,例如在数据库或其他文件中。后面的代码可以使用完整有效的内部路径名直接 100% 读取此类文件,然后将该文件推送(流式传输)给用户。
以下是此类代码的示例:
Stream PDF to browser?