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();
}
以下是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();
在页面中,放一个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>
如此,即可实现在当前页面显示图片.
<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();
}
以下是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();
在页面中,放一个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>
如此,即可实现在当前页面显示图片.
<img src=show.aspx?id=xx>
如此,即可实现在当前页面显示图片.
#7
好像还没有在一个页面中打开二进制流的控件。主要是http本身的限制。你还是用一个页面来处理吧。
#8
hchxxzx(NET?摸到一点门槛)
按你那个方法,如果二进制为空的时候,我要显示一个默认的图片,应该怎么处理了,
谢谢!
按你那个方法,如果二进制为空的时候,我要显示一个默认的图片,应该怎么处理了,
谢谢!
#9
如果为空,你可以以文件的方式读取硬盘上某个图片的二进制流,输出即可。
#10
如何 把一个大文件(上百兆)保存到数据库中?