我有一个存储图像的共享路径\\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上创建的虚拟目录?或者我在错误的路径上获取文件?我是否需要编写不同的代码?
答案 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"