簡體   English   中英

如何從ASP.Net和C#中的數據庫中獲取和顯示圖像

[英]How to Fetch and Display an Image from the Database in ASP.Net and C#

關於使用FileUpload控制器在數據庫中的表中插入圖像的教程非常多。

但是我找不到關於如何獲取這些圖像並顯示它們的很好的教程。

當我過去將圖像名稱或路徑存儲在數據庫中(作為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" />

和Voila,將顯示圖片。

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

一些教程最終將導致在“全屏”中顯示圖片。

我不希望那樣,我只是想以與上一個示例相同的方式獲取並顯示圖像,並在網頁內放置一個給定的大小和位置。

為什么要將圖像上傳到數據庫? 因為這些圖像是“個人資料圖片”,而不是公共圖片,所以我不希望訪客僅瀏覽/ Images /查找我網站上所有公共和私人圖片。

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

創建一個自定義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);
    }
}

然后,您需要對其進行配置以響應所需的URL。

  • 您可以使用Web.config文件來執行此操作
  • 或創建一個.ashx文件並將其指向您自己的HTTP處理程序

如果對此有任何疑問,請寫評論。

您將需要一個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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM