使用ASP.Net和VB.Net觀看圖像問題
代碼
Image1.ImageUrl = "c:\Blue hills.jpg"
上面的代碼不觀看圖像時我點擊的按鈕。
如何解決這個問題。
需要編寫代碼幫助
使用ASP.Net和VB.Net觀看圖像問題
代碼
Image1.ImageUrl = "c:\Blue hills.jpg"
上面的代碼不觀看圖像時我點擊的按鈕。
如何解決這個問題。
需要編寫代碼幫助
你不應該引用本地文件路徑 - 你應該設置ImageUrl
是在Web服務器上的URL - 例如,如果你有文件在你的網站的根,你可以參考它:
Image1.ImageUrl = "/Blue%20hills.jpg"
您提供給ImageUrl屬性的值是文件路徑而不是Url。
理想情況下,你應該在你的ASP.NET應用程序的文件夾保存圖像文件,你可以接着用相對或絕對URL路徑,即參考:
Image1.ImageUrl = "/Content/Images/Blue hills.jpg"
如果你想顯示從服務器圖片在網站根目錄之外的磁盤,您必須建立「代理」頁面。例如,將其稱爲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
文件。
當然,這會打開soem巨大的安全漏洞,並且實際上會完成web服務器本身的一部分工作(儘管這也會處理內容過期) – 2011-04-06 08:05:32
@Rowland:所以你說如果有人想顯示坐在在根之外的其他地方,他不能那樣做?我不認爲這是真的對不起。關於安全性,檢查給定名稱是否有效以及是否存在圖像很簡單。這裏沒有風險。 – 2011-04-06 08:24:40
@Shadow我在說你的代碼可以從文件系統傳遞任何文件(只要文件權限不會妨礙) - 它可能會以錯誤的MIME類型傳遞,但它仍然可以傳遞它。例如,如果有人打電話給ShowImage.aspx?image = Inetpub \ wwwroot \ Default.aspx(或web.config或...) – 2011-04-06 10:46:03
Image1.ImageUrl = System.Web.HttpContext.Current.Server.MapPath("~") + "/"+ "Images" + "/" + "Blue hills.jpg";
但如前所述,你不能引用這樣的本地文件,除非你使用HttpHandler。
'Image1'是什麼類型?請閱讀http://tinyurl.com/so-hints並改進此問題。 – Richard 2011-04-06 07:55:28