我正在研究的项目基本上有一个评论模块。用户可以发帖和帖子都有评论。我已经做了大部分工作,但我被困在我需要在所有帖子和评论中加载所有图片的部分。
我希望在他/她的帖子旁边显示每个用户的个人资料图片(缩略图)。图像存储在数据库和NOT文件系统中。我尝试了很多方法,但似乎都没有。
这是我如何从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,看起来很糟糕)
网络表单上的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");
我希望你们愿意让我在这里走上正轨!非常感谢!
答案 0 :(得分:2)
在我们尝试显示正在从数据库中读取的图像的情况下,我们通常创建一个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);
}
}
希望这会给你一个提示。