4

有很多关于使用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" />

瞧,图片将显示出来。

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

有些教程最终会导致全屏显示图片。

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

为什么我要将图像上传到数据库?因为这些图片是“个人资料图片”,而不是公共图片,所以我不希望客人简单地浏览 /Images/ 来查找我网站的所有图片,无论是公共的还是私人的。

4

3 回答 3

2

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

于 2012-12-25T23:53:32.307 回答
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);
    }
}

然后您需要对其进行配置以响应您希望的 URL。

  • 您可以使用 Web.config 文件来执行此操作
  • 或者创建一个.ashx文件并让它指向你自己的 HTTP 处理程序

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

于 2012-12-26T00:39:22.313 回答
-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();
于 2012-12-25T23:56:54.220 回答