最近在做一个项目时,发现数据库的设计是把图片的存放字段设置成了image类型。这就说明你只能把文件存入到数据库中,这个做法不是我常用的,只存图片路径的方法。所以就上网去查了一下。大体做法都一样。但是有一点不好的就是,你在上传图片的时候,无法对图片进行预览。根据这一点我自己做了一些改动。下面把代码放上来,大家看一下。
这个是将图片文件转化为二进制流,this.image1.ImgeUrl = this.File1.PageedFile.FileName就可以把图片显示出来,这里有一个问题是,你不能单独做一个按钮来让image控件显示图下,否则你存入数据库的就为空了.
存入的时候大家采用一般的
这时是把相应的信息存入。其实最难的就是在修改信息时,你如何让图片显示在image控中。这里我采用的是另写一个页面this.image1.imageURl = "aa.aspx?id="+这里是你的信息的ID号+"".这样我们只要让图片在aa.aspx里显示出来就可以了。代码如下
好了,这样在修改的时候,你的图片就可以显示出来了。
说实话,我不喜欢这种存图片的方法。一是数据库会变大。二是很不方便。虽然它可以让一些木马程序无法运行。可是asp.net中给提供的PostedFile.ContentType就很好用啊。呵呵。。。。。。。。
可能是我的技术有限。无法理解其中的奥秘吧。
这个是将图片文件转化为二进制流,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>");
}
}
{
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();
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();
SqlDataReader dr = cfdb.returnReader(strsql); // 这里我调用的是我的方法,你可以使用你的
if (dr.Read())
{
byte[] file=(Byte[])dr["FFicImage"]; //把图片信息取出来
Response.BinaryWrite(file); //让他显示出来
}
dr.Close();
说实话,我不喜欢这种存图片的方法。一是数据库会变大。二是很不方便。虽然它可以让一些木马程序无法运行。可是asp.net中给提供的PostedFile.ContentType就很好用啊。呵呵。。。。。。。。
可能是我的技术有限。无法理解其中的奥秘吧。