asp.net中将图片或文件存入数据库并读取显示在image控件中

来源:互联网 发布:淘宝怎么设置打折促销 编辑:程序博客网 时间:2024/04/30 09:28
      最近在做一个项目时,发现数据库的设计是把图片的存放字段设置成了image类型。这就说明你只能把文件存入到数据库中,这个做法不是我常用的,只存图片路径的方法。所以就上网去查了一下。大体做法都一样。但是有一点不好的就是,你在上传图片的时候,无法对图片进行预览。根据这一点我自己做了一些改动。下面把代码放上来,大家看一下。
这个是将图片文件转化为二进制流,this.image1.ImgeUrl = this.File1.PageedFile.FileName就可以把图片显示出来,这里有一个问题是,你不能单独做一个按钮来让image控件显示图下,否则你存入数据库的就为空了.
if(this.File1.PostedFile.ContentLength!=0)
            
{
                
if(this.File1.PostedFile.ContentType=="image/bmp" || this.File1.PostedFile.ContentType=="image/pjpeg" || this.File1.PostedFile.ContentType=="image/gif" ||this.File1.PostedFile.ContentType=="application/octet-stream")
                
{
                    
this.Image1.ImageUrl = this.File1.PostedFile.FileName;
                    Byte
{} fileByteArray = new Byte[this.File1.PostedFile.ContentLength]; 
                    Stream streamObject 
= this.File1.PostedFile.InputStream;
                    streamObject.Read(fileByteArray,
0,this.File1.PostedFile.ContentLength);
                }

                
else
                
{
                     Response.Write(
"<script>alert('对不起,你输入的图片格式不对!');</script>");
                }

            }
存入的时候大家采用一般的
               string sql="insert into download(fileName,ffileData) values('"+fileName+"','"+fileData+"')";

                SqlCommand cmd
=new SqlCommand(sql,con);//启用存储过程

                cmd.CommandType
=CommandType.StoredProcedure;//指定类型

                cmd.Parameters.Add(
"@fileName",SqlDbType.VarChar,200);

                cmd.Parameters[
"@fileName"].Value=fileName;

                cmd.Parameters.Add(
"@fileData",SqlDbType.Image);

                cmd.Parameters[
"@fileData"].Value=fileByteArray;

                cmd.ExecuteNonQuery();

 这时是把相应的信息存入。其实最难的就是在修改信息时,你如何让图片显示在image控中。这里我采用的是另写一个页面this.image1.imageURl = "aa.aspx?id="+这里是你的信息的ID号+"".这样我们只要让图片在aa.aspx里显示出来就可以了。代码如下
string strsql = "select  * from EnterPrise where FEPId = "+Convert.ToInt32(Request.QueryString["id"])+"";                            
SqlDataReader dr 
= cfdb.returnReader(strsql);//这里我调用的是我的方法,你可以使用你的
                if(dr.Read())
                
{
                    
                    
byte[] file=(Byte[])dr["FFicImage"]; //把图片信息取出来
                    Response.BinaryWrite(file);    //让他显示出来
                    
                }

                dr.Close();
好了,这样在修改的时候,你的图片就可以显示出来了。
说实话,我不喜欢这种存图片的方法。一是数据库会变大。二是很不方便。虽然它可以让一些木马程序无法运行。可是asp.net中给提供的PostedFile.ContentType就很好用啊。呵呵。。。。。。。。
可能是我的技术有限。无法理解其中的奥秘吧。