【发布时间】:2021-08-19 23:14:13
【问题描述】:
由于 Chromium 不再允许指向本地文件的链接,我正在尝试测试几个解决方案,以允许用户在本地网络共享上打开 PDF,而无需先下载它们(当前的解决方法)。
我测试了一个纯 JavaScript 解决方案,效果很好。
但是,我尝试在 IIS 中使用虚拟目录,该目录指向包含用户可以访问的文件的网络共享。
我创建了一个测试应用程序并将其发布到我的本地计算机上。
下面是我创建的虚拟目录的屏幕截图。
**下面**是我用来尝试打开文件的代码。
[HttpPost]
public ActionResult OpenPDF()
{
string directory = "./pdf";
string file = "/light.pdf";
byte[] fileBytes = System.IO.File.ReadAllBytes(directory + file);
return File(fileBytes, "application/pdf");
}
我假设虚拟目录位于根目录中。我试图找到一些在代码中访问虚拟目录的示例,但我没有找到。
我访问的资源:
https://docs.microsoft.com/en-us/iis/configuration/system.applicationhost/sites/site/application/virtualdirectory
https://docs.microsoft.com/en-us/troubleshoot/windows-server/networking/create-virtual-directory-folder-remote-computer#:~:text=In%20the%20Internet%20Information%20Services,and%20then%20click%20Virtual%20Directory.
Virtual Directory to navigate to http://localhost/MyWebsite instead of http://localhost:8080
Different between ./ , ../ , ../../ , ~/ on file path(URL) in asp.net
https://www.c-sharpcorner.com/UploadFile/francissvk/create-virtual-directory-in-iis/
我们将不胜感激任何和所有的帮助,谢谢。
【问题讨论】:
-
你不应该返回
new VirtualFileResult("pdf/light.pdf", ""application/pdf");,因为A FileResult that on execution writes the file specified using a virtual path to the response using mechanisms provided by the host. -
对不起,我没有使用 ASPNET 核心
-
好的,
Server.MapPath("~/pdf/light.pdf")获取正确的文件夹。 -
您需要在网络帐户下运行apppool,以便您可以授予它访问网络共享的权限。
-
你不能从服务器但你可以尝试在 html 的链接上添加一个 target="_blank"。并非所有浏览器都乐于接受这一点。
标签: c# asp.net-mvc iis filesystems virtual-directory