2010-06-17 81 views
2

我需要在ASP.NET MVC頁面上顯示將存儲在服務器上的圖像 我有一個應用程序類,可以用來提供路徑爲存儲在服務器上的映像提供路徑,而不是在應用程序文件中

這樣

public static class AppHelper 
{ 
    public static string ImageLowResPath(string imageName) 
    { 

     } 
} 

我怎樣才能獲得存儲在C文件路徑:這裏的服務器的驅動?

在我看來,我會得到的文件路徑這樣

IMG SRC = '<%= AppHelper.ImagelowResPath( 「10-1010.jpg」)%>'

謝謝

回答

2

你必須創建一個返回FileStreamResult如果動作該文件在您的wwwroot之外。

例如。

public FilestreamResult GetPicture(string Filename) { 
     Filename = @"C:\SomePath\" + Filename; 
      return new FileStreamResult(new FileStream(Filename, FileMode.Open, FileAccess.Read, FileShare.Read), "image/jpeg")); 
    } 

你的HTML現在看起來應該是這樣

<img src="/Controller/GetPicture?Filename=test.jpg" /> 

更新 只要你的圖片是不經常改變的靜態內容和你沒有需要實施某種形式的訪問控制這確實不是最好的解決方案。

根據最佳實踐,您應該將組件跨多個域分割。雅虎發佈了關於加速網站的最佳實踐的優秀指南 http://developer.yahoo.com/performance/rules.html#split

+0

哦,我的朋友謝謝!完美地工作。我開始做類似的事情,但試圖返回它作爲一個字節[]我不知道FileStreamResult。這讓生活變得如此簡單。 謝謝! – twal 2010-06-17 16:18:43

+0

現在我想知道我正在做的最佳做法。我不想將所有圖像保存在我的應用程序中,因爲包含圖像的文件夾被我的一些其他應用程序用於讀取和寫入。 有沒有更好的方式獲取和上傳這些圖像像使用虛擬目錄(雖然我真的不知道如何做到這一點)或什麼? – twal 2010-06-20 20:45:19

+0

@ marc.d你介意看看我的問題引用你的答案[這裏](http://stackoverflow.com/q/26768021/1751090)? – Rachael 2014-11-05 22:57:41

0

您需要使用使用Server.Mappath(...),這將虛擬路徑映射到它的物理位置在磁盤上:

string path = "~/Images/10-1010.jpg"; 
string filePath = Server.MapPath(path); 
+0

圖像不會在應用程序中保存。就在服務器文件系統上,因爲它們將被添加到應用程序之外。這仍然會找到他們嗎?它們不在www的根目錄 – twal 2010-06-17 15:25:06

+0

不,它不會找到圖像,除非它們映射到另一個虛擬目錄。 – SWeko 2010-06-17 15:37:57

+0

好吧,我不這麼認爲,有沒有辦法將它們從服務器文件系統中取出? – twal 2010-06-17 15:40:46

0

呃,我不知道你在問什麼的,但你可以嘗試即時通訊個人,然後訪問服務器共享?

[DllImport("advapi32.dll",EntryPoint = "LogonUser", SetLastError = true)] 
public static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, 
     int dwLogonType, int dwLogonProvider, ref IntPtr phToken); 

IntPtr admin_token = IntPtr.Zero; 
WindowsIdentity wid = WindowsIdentity.GetCurrent(); 
WindowsIdentity wid_admin; 
WindowsImpersonationContext wic; 

LogonUser(user, servername, pass, 9, 0, ref admin_token) 
wid_admin = new WindowsIdentity(admin_token); 
wic = wid_admin.Impersonate(); 

一旦你冒充有人用適當priveleges你可以去

\\服務器\ C $ \(圖像路徑)

+0

哦,我的壞,你正在尋找文件路徑,而不是訪問該文件。 – FlyingStreudel 2010-06-17 15:52:42

相關問題