Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ASP.Net和C中从数据库中获取和显示图像#_C#_Asp.net_Image - Fatal编程技术网

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

C# 如何在ASP.Net和C中从数据库中获取和显示图像#,c#,asp.net,image,C#,Asp.net,Image,关于使用FileUpload控制器在数据库的表中插入图像,有很多很好的教程 然而,我找不到一个关于如何获取这些图像并显示它们的好教程 当我过去在数据库中存储图像名称或路径(作为Varchar)时,通过这样做将非常简单 HTML/ASP: <img src="" runat="server" id="myImage" /> myImage.Src = myReader.getValue(0).toString(); <img src="/Images/pic.png" run

关于使用FileUpload控制器在数据库的表中插入图像,有很多很好的教程

然而,我找不到一个关于如何获取这些图像并显示它们的好教程

当我过去在数据库中存储图像名称或路径(作为Varchar)时,通过这样做将非常简单

HTML/ASP:

<img src="" runat="server" id="myImage" />
myImage.Src = myReader.getValue(0).toString();
<img src="/Images/pic.png" runat="server" id="myImage" />
结果:

<img src="" runat="server" id="myImage" />
myImage.Src = myReader.getValue(0).toString();
<img src="/Images/pic.png" runat="server" id="myImage" />

瞧,画面会显示出来

但现在我想获取上传的图像,而不是路径,这意味着表列的类型是IMAGE

一些教程最终将导致全屏显示图片

我不希望这样,我只是希望获取和显示图像的方式与前一个示例中的显示方式相同,在我的网页中具有给定的大小和位置


为什么我要将图像上载到数据库?因为这些图片是“个人资料图片”,而不是公共图片,所以我不希望来宾只需浏览/images/即可找到我网站的所有图片,包括公共和私人图片。

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

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

创建一个自定义的
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处理程序

如果您对此有任何疑问,请写一条评论。

正确的方法是使用处理程序而不是整页来显示图像。-1永远不要为此创建.aspx。正如@Aristos所说,创建一个自定义的
IHttpHandler
实现并使用它。是的,这将是“正确”的解决方案,但提问者似乎在ASP.NET/web编程方面没有太多经验。因此,使用专用页面是一个易于理解的概念(与自定义处理程序相比,自定义处理程序“某种方式”连接到处理管道中),并且也可以工作。