2017-02-21 120 views
0

因此,我正在嘗試創建顯示保存在某個文件夾中的圖像的應用程序。每個用戶在C驅動器上都有一個不同的文件夾,從中可以從中獲取圖像。從C路徑顯示圖像或更改虛擬路徑指向的位置

目前我使用:

@foreach (var imgPath in Directory.GetFiles("C:/Users/me/documents", "*.*")) 
{ 
    var img = new FileInfo(imgPath); 
    <img src="@Url.Content(String.Format("C:/Users/me/documents/{0}", img.Name))" /> 
} 

然而,這並不顯示,因爲C路徑的形象,但網上淘使我比別人無處其他說你可以做一個虛擬路徑,並指出它到一個物理的,但我找不到教程。

我也想讓me部分變量,因爲每個用戶都有自己的文件夾,但我不確定這是否可以在控制器中處理。

+0

你的文件夾需要是相對/虛擬路徑(使用'Server.MapPath()'),'me'可以根據用戶的ID生成。 –

+0

@StephenMuecke我有這種感覺,但是我怎樣才能將虛擬路徑映射到物理路徑呢?如果我在Visual Studio中創建一個新文件夾,它會自動創建它的路徑。 –

+0

首先在應用程序中爲文件創建一個文件夾,稱爲「用戶」。那麼對於每個用戶,您可以通過編程方式添加基於唯一標識的子文件夾(可能在註冊時)。然後你可以使用Server.MapPath()獲取文件夾的絕對路徑--Server.MapPath(「〜/ Users/User1」)' –

回答

1

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操作,並通過視圖模型/視圖包(根據需要)將圖像名稱列表傳遞到視圖。