2011-04-06 58 views
1

使用ASP.Net和VB.Net觀看圖像問題

代碼

Image1.ImageUrl = "c:\Blue hills.jpg" 

上面的代碼不觀看圖像時我點擊的按鈕。

如何解決這個問題。

需要編寫代碼幫助

+0

'Image1'是什麼類型?請閱讀http://tinyurl.com/so-hints並改進此問題。 – Richard 2011-04-06 07:55:28

回答

3

你不應該引用本地文件路徑 - 你應該設置ImageUrl是在Web服務器上的URL - 例如,如果你有文件在你的網站的根,你可以參考它:

Image1.ImageUrl = "/Blue%20hills.jpg" 
0

您提供給ImageUrl屬性的值是文件路徑而不是Url。
理想情況下,你應該在你的ASP.NET應用程序的文件夾保存圖像文件,你可以接着用相對或絕對URL路徑,即參考:

Image1.ImageUrl = "/Content/Images/Blue hills.jpg" 
0

如果你想顯示從服務器圖片在網站根目錄之外的磁盤,您必須建立「代理」頁面。例如,將其稱爲ShowImage.aspx,它將獲得URL上的圖片名稱。

然後你就會有這樣的代碼

Image1.ImageUrl = "ShowImage.aspx?image=Blue hills.jpg" 

而對於後面ShowImage.aspx代碼代碼:

string imageName = Request.QueryString["image"] + ""; 
if (imageName.Length == 0 || imageName.Contains("/") || imageName.Contains("\\") || !imageName.ToLower().EndsWith(".jpg")) 
{ 
    throw new Exception("Invalid image requested"); 
} 
else 
{ 
    string strFullPath = "C:\\" + imageName; 
    Response.ContentType = "image/jpeg"; 
    Response.Clear(); 
    Response.WriteFile(strFullPath); 
} 
Response.End(); 

這是C#但應該足夠簡單,轉化爲VB.NET爲好。

編輯:添加了基本驗證,以驗證用戶是否不嘗試從不同目錄獲取文件並僅允許.jpg文件。

+0

當然,這會打開soem巨大的安全漏洞,並且實際上會完成web服務器本身的一部分工作(儘管這也會處理內容過期) – 2011-04-06 08:05:32

+0

@Rowland:所以你說如果有人想顯示坐在在根之外的其他地方,他不能那樣做?我不認爲這是真的對不起。關於安全性,檢查給定名稱是否有效以及是否存在圖像很簡單。這裏沒有風險。 – 2011-04-06 08:24:40

+0

@Shadow我在說你的代碼可以從文件系統傳遞任何文件(只要文件權限不會妨礙) - 它可能會以錯誤的MIME類型傳遞,但它仍然可以傳遞它。例如,如果有人打電話給ShowImage.aspx?image = Inetpub \ wwwroot \ Default.aspx(或web.config或...) – 2011-04-06 10:46:03

0
Image1.ImageUrl = System.Web.HttpContext.Current.Server.MapPath("~") + "/"+ "Images" + "/" + "Blue hills.jpg"; 

但如前所述,你不能引用這樣的本地文件,除非你使用HttpHandler。

http://www.15seconds.com/issue/020417.htm