我正在尝试在Web表单上显示从数据库中以二进制流的形式提取的图像。你能否对此有所了解!
我正在开展一个用户拥有个人资料的项目,每个用户都有自己的个人资料图片显示在主页中。这张照片来自数据库。
这是我用来获取流的代码!
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());
感谢
答案 0 :(得分:8)
Base64对二进制文件进行编码并插入图像标记中,如下所示(更改mimetype以适应):
<img src="data:image/gif;base64,BASE64 ENCODED BINARY HERE">
这是你怎么做的,但我不会这样做,因为有些浏览器无法处理它(IE6)。最好先保存到文件并按常规方式执行。
答案 1 :(得分:4)
我过去所做的是将图片网址设置为aspx页面,如下所示:
<img src="getLogo.aspx" alt="Logo" />
然后,在getLogo.aspx的代码隐藏中,我完成了以下操作:
Response.BinaryWrite( imageData );
Response.ContentType = "image/gif";
其中imageData
是您的图像作为字节数组
答案 2 :(得分:3)
我会使用无意义的名称(例如数据库中记录的主键或GUID)将图像保存到网站内可供外部调用者(即图像子目录)访问的目录中,然后添加href到网页中的这个文件。
答案 3 :(得分:1)
使用以下方式将内存流保存到文件:
MemoryStream memoryStream = new MemoryStream();
using (FileStream fileStream = new FileStream(FilePath, FileMode.Open, FileAccess.Write))
{
memoryStream.SaveTo(fileStream);
}
然后将文件名放在html中。
答案 4 :(得分:1)
首先为图像添加一个单独的.aspx文件(实际上我很喜欢IHttpHandler重载,但原理相同,让我们一次只引入一个新概念)。
.aspx文件将继承代码隐藏,并且没有内容。所以它会有<%@ Page %>
指令而没有别的。
在代码隐藏中,在页面加载事件处理程序中,获取图像,并将响应的内容类型设置为适当的值(或者,如果所有图像都是image / png,则可以硬编码)。然后将图像写入输出。
TestDBDataContext context1 = new TestDBDataContext();
int id;
if(int.TryParse(Request.QueryString["id"], out id))
{
var r = (from a in context1.ImageTables where a.Id == 8 select a).FirstOrDefault();
if(r != null)
{
Response.ContentType = r.ContentType;
Response.BinaryWrite(r.FileImage.ToArray());
return;
}
}
//code to handle 404 not found for no such image here (send error message or Server.Transfer to error page, etc.
然后你可以将它用于<img src="profileImg.aspx?id=8" alt="" />
等。
性能改进是从数据库一次获得4k块的字节并将其写入Response.OutputStream
,而不是内存中的一个大型数组。对于小文件而言,差异并不重要,但是对于非常大的文件来说,这可能是相当大的(因为在#34;现在我的网络服务器不再屡屡重复!&#34;相当可观)。