用什么控件可以读取以流二进制形式存储的图文件??

时间:2022-09-24 14:57:58
Response.ContentType=(string)dr["ImageContentType"];
Response.OutputStream.Write(byte[])dr["ImageData"],0,(int)dr["ImageSize"];

这边两句话是将数据库表中的字段ImageData(以二进制流的方式存放图文件JPG,GIF)
读取出来, 然后在IE上显示该图片.


现在的问题是,该语句是在当前页面刷新后显示图, 而此前的页面已经不见了(要退回一步才看到此前页面); 现在我就想读取图文件时, 能否在当前页中的一个区域内显示?  我用Image服务器控件,但它没有读取流文件的功能,  还有什么好办法,或是有其它控件吗?


希望知道的朋友告诉我如何做. 谢谢大家!

10 个解决方案

#1


补充一下, 开发工具是 c#.NET

#2


<img src="photoShow.aspx?id=图片编号什么的">
以下是photoShow.aspx.cs中的代码
if(!Page.IsPostBack)
{
int PhotoID =Convert.ToInt32(Request.QueryString["tempID"]);
SqlDataReader dr;
Leader leader=new Leader();
         dr=leader.GetPubDown(PhotoID);
if(dr.Read())
{
Response.OutputStream.Write((byte[])dr["PhotoCont"], 0, (int)dr["PhotoSize"]);     
Response.End();
}
dr.Close();
}

#3


asp:Image这些也可以用类似的方式处理,其思路就是将输出流文件单独写成一个页面,然后将图片容器的连接属性指向这个页面就可以了。

#4


下面是一个示例
在页面中,放一个Image控件,在后台指定它的链接地址如下:
----------------------------------------------------------------------
//为方便,写一个固定ID号tmp_id=103
this.Image1.ImageUrl = "showimg.aspx?tmp_id=103" ;


下面是显示图片的页面showimg.aspx后台代码,该页面不需要放任何东西.
--------------------------------------------------------------------
//创建数据库连接
OracleConnection myConnection = new OracleConnection(ConfigurationSettings.AppSettings["sysDSN"]);
myConnection.Open();

//打开数据库
OracleCommand myCommand = myConnection.CreateCommand();
string sql = "select tmp_blob from tmp where tmp_id = 103";
myCommand.CommandText = sql;
OracleDataReader myRead = myCommand.ExecuteReader();

//开始读取
myRead.Read();
Byte[] Buffer = (Byte[])myRead[0];

//输出
this.Response.Clear();
//输出mime类型
this.Response.ContentType = "xxx";
this.Response.BinaryWrite(Buffer);
this.Response.End();

#5


先谢谢各位的回答.  只是上边的回答总是需要打开一个新的窗口来显示图,  我是想如果我在本面有一个DbGrid控件,显示数据库记录, 当我选中任一条记录时,在DbGrid下边显示图,而不需要另开一个窗口.


可否有这个解决方法?  再次表示感谢

#6


你可将上述的代码,写在一个单独的页面里面,然后,在你需要显示的页面中如下调用 
<img src=show.aspx?id=xx>
如此,即可实现在当前页面显示图片.

#7


好像还没有在一个页面中打开二进制流的控件。主要是http本身的限制。你还是用一个页面来处理吧。

#8


hchxxzx(NET?摸到一点门槛) 
按你那个方法,如果二进制为空的时候,我要显示一个默认的图片,应该怎么处理了,
谢谢!

#9


如果为空,你可以以文件的方式读取硬盘上某个图片的二进制流,输出即可。

#10


如何 把一个大文件(上百兆)保存到数据库中?

#1


补充一下, 开发工具是 c#.NET

#2


<img src="photoShow.aspx?id=图片编号什么的">
以下是photoShow.aspx.cs中的代码
if(!Page.IsPostBack)
{
int PhotoID =Convert.ToInt32(Request.QueryString["tempID"]);
SqlDataReader dr;
Leader leader=new Leader();
         dr=leader.GetPubDown(PhotoID);
if(dr.Read())
{
Response.OutputStream.Write((byte[])dr["PhotoCont"], 0, (int)dr["PhotoSize"]);     
Response.End();
}
dr.Close();
}

#3


asp:Image这些也可以用类似的方式处理,其思路就是将输出流文件单独写成一个页面,然后将图片容器的连接属性指向这个页面就可以了。

#4


下面是一个示例
在页面中,放一个Image控件,在后台指定它的链接地址如下:
----------------------------------------------------------------------
//为方便,写一个固定ID号tmp_id=103
this.Image1.ImageUrl = "showimg.aspx?tmp_id=103" ;


下面是显示图片的页面showimg.aspx后台代码,该页面不需要放任何东西.
--------------------------------------------------------------------
//创建数据库连接
OracleConnection myConnection = new OracleConnection(ConfigurationSettings.AppSettings["sysDSN"]);
myConnection.Open();

//打开数据库
OracleCommand myCommand = myConnection.CreateCommand();
string sql = "select tmp_blob from tmp where tmp_id = 103";
myCommand.CommandText = sql;
OracleDataReader myRead = myCommand.ExecuteReader();

//开始读取
myRead.Read();
Byte[] Buffer = (Byte[])myRead[0];

//输出
this.Response.Clear();
//输出mime类型
this.Response.ContentType = "xxx";
this.Response.BinaryWrite(Buffer);
this.Response.End();

#5


先谢谢各位的回答.  只是上边的回答总是需要打开一个新的窗口来显示图,  我是想如果我在本面有一个DbGrid控件,显示数据库记录, 当我选中任一条记录时,在DbGrid下边显示图,而不需要另开一个窗口.


可否有这个解决方法?  再次表示感谢

#6


你可将上述的代码,写在一个单独的页面里面,然后,在你需要显示的页面中如下调用 
<img src=show.aspx?id=xx>
如此,即可实现在当前页面显示图片.

#7


好像还没有在一个页面中打开二进制流的控件。主要是http本身的限制。你还是用一个页面来处理吧。

#8


hchxxzx(NET?摸到一点门槛) 
按你那个方法,如果二进制为空的时候,我要显示一个默认的图片,应该怎么处理了,
谢谢!

#9


如果为空,你可以以文件的方式读取硬盘上某个图片的二进制流,输出即可。

#10


如何 把一个大文件(上百兆)保存到数据库中?