我试图在整个web表单显示不同用户的图像

本文关键字:显示 用户 图像 表单 web | 更新日期: 2023-09-27 18:18:01

我正在做的项目基本上是有一个模块的评论。用户可以发布帖子,帖子也可以进行评论。我已经完成了大部分工作,但我被困在我需要加载所有帖子和评论的所有图像的部分。

每个用户的头像(缩略图)我想在他/她的帖子旁边显示。图像存储在数据库中,而不是文件系统中。我试了很多方法,但似乎都不起作用。

这是我如何检索字节数组(图像数据)从db

TestDBDataContext context1 = new TestDBDataContext();
        var r = (from a in context1.ImageTables where a.Id == 8 select a).First();
        MemoryStream stream = new MemoryStream(r.FileImage.ToArray());

方法1:(这不起作用,由于某种原因,它显示了一个不可见的图像,该图像的扩展名为。aspx.jpeg,并且它似乎损坏了)

web表单上的HTML图像标签

<img src="WebForm1.aspx" alt="" />

背后的代码
 var r = (from a in db.ImageTables where a.Id == 17 select a).FirstOrDefault();
            if (r != null)
            {                    
                Response.ContentType = "image/jpeg";
                Response.BinaryWrite(r.FileImage.ToArray());
                return;
            }

方法2 试图将图像保存为System.Drawing.Image对象,然后将图像src链接到该对象。这种方法是有效的,但是如果我不能一次检索和显示多个图像,那么在数据库中保存这些图片就没有意义了。

        TestDBDataContext context1 = new TestDBDataContext();
        var r = (from a in context1.ImageTables where a.Id == 8 select a).First();
        MemoryStream stream = new MemoryStream(r.FileImage.ToArray());
        System.Drawing.Image newImage;
        newImage = System.Drawing.Image.FromStream(stream);
        Random random = new Random();
        newImage.Save("D:''" + random.Next(1000, 5000) + ".jpeg");

我希望你们愿意把我放在正确的轨道上!非常感谢!

我试图在整个web表单显示不同用户的图像

在我们的例子中,当我们试图显示从数据库中读取的图像时我们通常创建一个HttpHandler并设置图像,例如:

Logo.ImageUrl = "~/Handlers/GetTempLogo.ashx?LogoGUID=" + Session["TempLogoGUID"];
在处理程序中,我们有:
using (aDataContext db = new aDataContext())
            {
                var objData = (from c in db.Companies where c.CompanyId == CompanyID select c.LogoSmall).FirstOrDefault();
                if (objData == null)
                {
                    context.Response.BinaryWrite(System.IO.File.ReadAllBytes(HttpContext.Current.Server.MapPath("~/Images/defaultLogo.png")));
                    return;
                }
                using (System.IO.MemoryStream str = new System.IO.MemoryStream(objData.ToArray(), true))
                {
                    str.Write(objData.ToArray(), 0, objData.ToArray().Length);
                    Byte[] bytes = str.ToArray();
                    context.Response.BinaryWrite(bytes);
                }
            }