从IIS访问网络上的文件

时间:2016-02-01 17:58:31

标签: asp.net iis iis-7

我有一个存储图像的共享路径\\mynetworkshare\myfolder

我有一个域用户mydomainuser,该用户被授予对该路径中文件的读取权限

我在IIS上托管了网站。我在IIS站点中创建了一个虚拟目录,其别名myphotos指向物理路径\\mynetworkshare\myfolder。我还点击了Connect as...对话框中的Add Virtual Directory按钮,并提供了我的mydomainuser凭据。

我点击了新创建的虚拟导演myphotos,然后点击右侧窗格中的“内容视图”。我能够在IIS中查看我的所有照片。由此,我假设将虚拟目录设置为我的共享驱动器是正确的。

现在,问题是如何从我的代码中访问此虚拟目录或文件?

我在下面试过

var filePath = Server.MapPath("~/myphotos/" + "myimage.jpg");

当我将filePath写入日志文件时,我发现它正在尝试映射到我的网站文件夹中的物理文件夹设置。

而不是指向

\\mynetworkshare\myfolder\myimage.jpg

指向

d:\wwwroot\inetpub\mywebsitefolder\myphotos\myimage.jpg

我知道Server.MapPath解析为托管网站的物理路径,但我想知道它与我的虚拟目录的行为是否相同。

或者我是否需要让ASP.Net知道myphotos是在IIS上创建的虚拟目录?或者我在错误的路径上获取文件?我是否需要编写不同的代码?

2 个答案:

答案 0 :(得分:0)

您可以使用System.Web.Administration(在NuGet中提供)从IIS(7+)获取物理路径

var physicalPath = new Microsoft.Web.Administration.ServerManager()
    .Sites["Default Web Site"]
    .Applications["/MyApplication"]
    .VirtualDirectories["/MyVirtualPath"]
    .PhysicalPath;

如果虚拟目录位于根目录中,则应用程序为"/"

Connect as...中指定的内容可能仅适用于直接网络请求。要从应用程序访问文件,您需要将应用程序池配置为使用mydomainuser作为其标识(位于Advanced Settings...下),或者您需要向运行IIS的计算机授予共享权限应用程序池使用内置帐户。

答案 1 :(得分:0)

缺少的步骤是将虚拟文件夹转换为应用程序。

Right-click the Virtual Folder myphotos, click on Convert to Application

链接here应该解释步骤

不添加Server.MapPath,它工作正常。例如

image.src = "~/myphotos/myimage.jpg"