Url.Content
幫助程序方法爲您的文件提供虛擬內容路徑並返回一個url來訪問您網站中的文件。您不應該將物理目錄位置傳遞給該位置。
您可能會考慮將圖像保存在您的網絡應用程序中。創建一個名爲「Images」的目錄,然後你可以安全地使用Url.Content方法。
例如,
@foreach (var imgPath in Directory.GetFiles(Server.MapPath(Url.Content("~/Images/"))))
{
<img src="@Url.Content("~/Images/"+ @Path.GetFileName(imgPath))" />
}
,或者如果你確實需要在一些地方保存應用程序根目錄外的圖像(例如:「C:\ TEMP \圖像或網絡位置),你可能會考慮創建一個這需要的文件名操作方法,從位置讀取該文件,並返回爲圖像。
public ActionResult GetImg(string id)
{
var path = [email protected]"C:\temp\images\{id}.png";
var bytes = System.IO.File.ReadAllBytes(path);
return File(bytes, "image/png");
}
現在,你只需要調用這個終點,並用其作爲圖像的src屬性。
@foreach (var imgPath in Directory.GetFiles(@"C:\temp\images", "*.*"))
{
<img src="@Url.Action("GetImg",new {id=Path.GetFileNameWithoutExtension(imgPath)})" />
}
以上是一個簡單的解決方案,我硬編碼它返回PNG文件。你可以更新它以更靈活(增加一個參數來接受文件擴展名)
注意:我個人更喜歡在剃鬚刀文件中保留最小的C#。我喜歡將C#代碼(所有這些Directory.GetFiles
行)移動到GET操作,並通過視圖模型/視圖包(根據需要)將圖像名稱列表傳遞到視圖。
你的文件夾需要是相對/虛擬路徑(使用'Server.MapPath()'),'me'可以根據用戶的ID生成。 –
@StephenMuecke我有這種感覺,但是我怎樣才能將虛擬路徑映射到物理路徑呢?如果我在Visual Studio中創建一個新文件夾,它會自動創建它的路徑。 –
首先在應用程序中爲文件創建一個文件夾,稱爲「用戶」。那麼對於每個用戶,您可以通過編程方式添加基於唯一標識的子文件夾(可能在註冊時)。然後你可以使用Server.MapPath()獲取文件夾的絕對路徑--Server.MapPath(「〜/ Users/User1」)' –