簡體   English   中英

從IIS訪問網絡上的文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM