IIS 虚拟目录,并从 ASP.NET MVC 项目访问它们的内容
IIS VirtualDirectories, and accessing their contents from a ASP.NET MVC Project
由于 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。
Different between ./ , ../ , ../../ , ~/ on file path(URL) in asp.net
https://www.c-sharpcorner.com/UploadFile/francissvk/create-virtual-directory-in-iis/
非常感谢任何帮助,谢谢。
在 ASP.NET Core 中你可以 return 一个 VirtualFileResult
A FileResult that on execution writes the file specified using a virtual path to the response using mechanisms provided by the host.
或者您可以执行 Server.MapPath("~/pdf/light.pdf")
来获取虚拟路径。
Returns the physical file path that corresponds to the specified virtual path.
在您的示例代码中,您可以这样使用它:
[HttpPost]
public ActionResult OpenPDF()
{
string directory = "/pdf"; // notice I removed the .
string file = "/light.pdf";
var filepath = Server.MapPath("~" + directory + file);
byte[] fileBytes = System.IO.File.ReadAllBytes(filepath);
return File(fileBytes, "application/pdf");
}
请记住,如果要访问网络共享,您的应用程序池需要 运行 在可以访问所述网络共享的身份下。
要在新选项卡中下载文件,请在客户端 html 中尝试 <a href="/file.pdf" target="_blank">file</a>
。
由于 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。
Different between ./ , ../ , ../../ , ~/ on file path(URL) in asp.net
https://www.c-sharpcorner.com/UploadFile/francissvk/create-virtual-directory-in-iis/
非常感谢任何帮助,谢谢。
在 ASP.NET Core 中你可以 return 一个 VirtualFileResult
A FileResult that on execution writes the file specified using a virtual path to the response using mechanisms provided by the host.
或者您可以执行 Server.MapPath("~/pdf/light.pdf")
来获取虚拟路径。
Returns the physical file path that corresponds to the specified virtual path.
在您的示例代码中,您可以这样使用它:
[HttpPost]
public ActionResult OpenPDF()
{
string directory = "/pdf"; // notice I removed the .
string file = "/light.pdf";
var filepath = Server.MapPath("~" + directory + file);
byte[] fileBytes = System.IO.File.ReadAllBytes(filepath);
return File(fileBytes, "application/pdf");
}
请记住,如果要访问网络共享,您的应用程序池需要 运行 在可以访问所述网络共享的身份下。
要在新选项卡中下载文件,请在客户端 html 中尝试 <a href="/file.pdf" target="_blank">file</a>
。