2012-07-24 67 views
3

我試圖在圖像控件上顯示圖像,但它不起作用。我基本上使用它作爲屏幕截圖預覽。我將位圖保存到服務器路徑中的Images文件夾中,然後將控件的ImageUrl設置爲保存的圖像位置。這是我的代碼。此代碼在單擊按鈕上執行:將圖像控件源設置爲服務器中的圖像

img.Save(Server.MapPath("~/Images/") + "test.png", ImageFormat.Png); 
Image1.ImageUrl = Server.MapPath("~/Images/") + "test.png"; 
Image1.DataBind(); 

沒有發現任何異常,並且圖像在路徑中正確保存。

回答

6

不能使用爲使用Server.Mappath URL的,改變這種(假設圖像文件夾在您的應用程序的根文件夾):

Image1.ImageUrl = "/images/test.png"; 

更新:

由於Graymatter建議IH評論認爲應該是:

Image1.ImageUrl = "~/images/test.png"; 

我忽視的是,我們正在談論的圖像服務器控件

+0

啊,真不錯。我應該知道這一點。謝謝一堆! – tareqx3 2012-07-24 21:34:46

+0

你不應該像這樣硬編碼路徑。您無法保證您的網站將託管在框(根/虛擬目錄)上。 – Graymatter 2012-07-24 21:34:56

+0

@Graymatter - 會「〜/ images/test.png」而不是?如果不是,在這種情況下你會提出什麼建議? – 2012-07-24 21:39:19

2

鏈接直接寫入應用程序中的Web文件夾永遠不是一個好主意。我寧願去創建一個ashx處理程序的路線和流回圖像。你可以創建一個文件(例如,getmyimage.ashx.cs),看起來是這樣的:

using System; 
using System.Web; 

public class getmyimage : IHttpHandler 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     Response.ContentType = "image/png"; 
     Response.WriteFile("x:\myimages\test.png"); 
     Response.End(); 
    } 

    public bool IsReusable 
    { 
    get 
    { 
     return false; 
    } 
    } 
} 

getmyimage.ashx將包含這樣的事情:

<% @ webhandler language="C#" class="getmyimage" %> 

在這段代碼中,「X:\ myimages \ test.png「就是你想要流回瀏覽器的圖像。您可以將參數添加到getmyimage.ashx url以指定應加載哪個圖像。您還可以修改代碼以便即時生成圖像或沿着這些線條生成圖像。

然後,您可以指向圖像URL中的「getmyimage.ashx」。所以,你的IMAGEURL應該是這樣的:

Image1.ImageUrl = "getmyimage.ashx" 

安東尼奧在評論中指出的,你需要看看你想要的緩存選項的類型和設置。默認行爲是始終發送圖像,而不是緩存它。如果你希望緩存的形象,你應該看看下面的帖子:

Caching ASHX Image Response

直接映射到問題的圖像,你可以使用這個:

Image1.ImageUrl = "~/images/test.png" 
+0

+1)最後一行;只需提及您應設置緩存選項,或者每次用戶重新加載頁面或在另一頁上使用相同圖像時,瀏覽器都會詢問您的圖像。例如http://stackoverflow.com/questions/7560180/caching-ashx-image-response – 2012-07-24 22:10:18

+0

非常好的一點,我會修改帖子以包含它。 – Graymatter 2012-07-24 22:15:13

+0

@AntonioBakula有一件令我恐懼的生活大事正在寫入網站文件夾。這是非常危險的,這就是爲什麼我會用其他替代方法來解決像這樣的問題:) – Graymatter 2012-07-24 22:19:33