[英]Accessing Files on Network from IIS
我有一個共享路徑\\\\mynetworkshare\\myfolder
,其中存儲了圖像。
我有一個域用戶mydomainuser
,該用戶被授予對該路徑中文件的讀取訪問權限
我在IIS上托管了網站。 我在IIS站點中創建了一個虛擬目錄,其中的Alias myphotos
指向物理路徑\\\\mynetworkshare\\myfolder
。 我還單擊了“ Add Virtual Directory
對話框中的“ Connect as...
按鈕,並提供了我的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上創建的虛擬目錄? 還是我在獲取文件的錯誤路徑上? 我需要編寫一些不同的代碼嗎?
您可以使用System.Web.Administration (在NuGet中提供)從IIS(7+)中獲取物理路徑。
var physicalPath = new Microsoft.Web.Administration.ServerManager()
.Sites["Default Web Site"]
.Applications["/MyApplication"]
.VirtualDirectories["/MyVirtualPath"]
.PhysicalPath;
如果虛擬目錄位於根目錄中,則應用程序為"/"
Connect as...
指定的內容僅適用於直接Web請求。 要從您的應用程序訪問文件,您需要將應用程序池配置為使用mydomainuser
作為其標識(位於“ Advanced Settings...
),或者如果應用程序池使用了IIS,則需要向運行IIS的計算機授予共享權限。內置帳戶。
缺少的步驟是將虛擬文件夾轉換為應用程序。
Right-click the Virtual Folder myphotos, click on Convert to Application
此處的鏈接應說明步驟
無需添加Server.MapPath,它就可以正常工作。 例如
image.src = "~/myphotos/myimage.jpg"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.