2012-12-25 23 views
4

有很多關於在數據庫中使用FileUpload控制器在表格中插入圖像的優秀教程。如何從ASP.Net和C#數據庫中獲取並顯示圖像

然而,我找不到一個關於如何獲取這些圖像並顯示它們的好教程。

當我用來存儲在數據庫中的圖像名或路徑(爲VARCHAR),這將是做這樣的事情很簡單...

HTML/ASP:

<img src="" runat="server" id="myImage" /> 

C#:

myImage.Src = myReader.getValue(0).toString(); 

的結果:

<img src="/Images/pic.png" runat="server" id="myImage" /> 

和瞧,圖片就會顯示出來。

但現在我想獲取上傳的圖像,而不是路徑,意味着表格列的類型是圖像。

某些教程最終會導致在FULL SCREEN中顯示圖片。

我不希望這樣,我只是想要像在前面的例子中顯示的那樣,在給定的大小和位置在我的網頁中顯示圖像。

爲什麼我要上傳圖片到數據庫?因爲這些圖片是「個人資料圖片」,而不是公開圖片,所以我不希望客人簡單瀏覽/圖片/以查找我的網站的所有圖片,公共和私人圖片。

+2

http://www.dotnetcurry.com/ShowArticle.aspx?ID=129 –

回答

2

首先,要做你想做的事情,我只是將文件複製到一個臨時位置,並使用該位置作爲「src」屬性。稍後,您可以刪除該文件。更復雜的方法是創建一個將圖像作爲二進制流寫入網頁的aspx頁面。這個頁面會從數據庫中獲取圖像,並在響應中寫入流。然後,您將在圖像的src屬性中使用此aspx頁面。但是,將圖像路徑存儲在數據庫和文件系統上的實際文件並不意味着該文件夾必須是可瀏覽的或公共的。例如,您可以關閉目錄瀏覽。

-1

您將需要一個aspx頁面讀取數據庫中的圖像並返回原始字節。

這裏有一個快速草圖如何做到這一點:

byte[] data = (byte[])myReader.getValue(0); 

Response.ContentType = "image/jpeg"; //or whatever your used image type is 
Response.OutputStream.Write(data, 0, data.Length); 
Response.End(); 

另一種方法是實現此自定義的HttpHandler。

另一部分是從你的img標籤「呼叫」這個頁面參數指定圖片ID:

myImage.Src = "/image.aspx?id=" + myReader.getValue(0).toString(); 
+1

正確的方法是使用處理程序而不是整頁來以這種方式顯示圖像。 – Aristos

+0

-1 **從不,以前**爲此創建一個.aspx。正如@Aristos所說,創建一個自定義的'IHttpHandler'實現並使用它。 – Venemo

+0

是的,這將是「正確的」解決方案,但是提問者似乎沒有太多的ASP.NET/web編程經驗。因此,使用專用頁面是一個容易理解的概念(與自定義處理程序比較,其中「某些方式」與處理管道掛鉤)並且也可以工作。 – Peter

1

創建一個自定義IHttpHandler實現,可從您的數據庫服務於您的圖像。例如,您可以將字節獲取到流中並將該流複製到Web響應的輸出中。

下面是一個簡單的例子:

public class MyImageHandler : IHttpHandler 
{ 
    public bool IsReusable { get { return true; } } 

    public void ProcessRequest(HttpContext ctx) 
    { 
     Stream yourStream = ...; // This is where you get your data from your database 
     ctx.Response.ContentType = "image/jpeg"; 
     yourStream.CopyTo(ctx.Response.OutputStream); 
    } 
} 

然後,你需要把它配置到您想要的網址迴應。

  • 您既可以使用Web.config文件做到這一點
  • 或創建.ashx文件,並把它指向你自己的HTTP處理程序

如果您對此有任何疑問,只是寫一個評論。

相關問題