如何从ASP.Net和C#中的数据库中获取和显示图像

时间:2012-12-25 23:45:36

标签: c# asp.net image

有很多关于使用 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 /查找我公共和私人网站的所有图片。

3 个答案:

答案 0 :(得分:2)

首先,为了做你想做的事情,我只是将文件复制到一个临时位置,并将该位置用于“src”属性。稍后,您可以删除该文件。更复杂的方法是创建一个aspx页面,将图像作为二进制流写入网页。此页面将从数据库中获取图像,并在响应中写出流。然后,您将在图像的src属性中使用此aspx页面。但是,将图像路径存储在数据库中并将实际文件存储在文件系统上并不意味着该文件夹必须是可浏览的或公共的。例如,您可以关闭目录浏览。

答案 1 :(得分: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处理程序

如果您对此有任何疑问,请发表评论。

答案 2 :(得分:-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。

另一部分是使用指定图片ID的参数从img代码“调用”此页面:

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