ASP.NET数据库存取图片的方法
当我们有大量的图片或者图片比较大时,我们常规的做法可能是保存图片路径,但是也不排除需要将图片直接存放到数据库的情况,此时就需要保存图片到数据库了。这篇文章我会向大家介绍:
如何通过fileupload控件将图片保存到数据库
如何通过button控件从数据库导出图片
具体步骤如下:
保存图片到数据库
第一步:首先在数据库创建一个名为“images”的表,代码如下:
create table images ( roll_no varchar(12) primary key, name_file varchar(100), extension varchar(100) , img varbinary(max) , img_date datetime )
可以看到这个表存储了这些内容:图片的登记号、文件名、文件扩展名、二进制数据以及上传时间。
第二步:然后打开visual studio,创建一个空网站,命名为”imagetobinary”。
第三步:再添加一个新页面,命名为“conversion.aspx”
在这个页面我们拖进textbox , fileupload, button这三个控件。
界面如图:
当然你也可以选择在conversion.apsx文件直接输入这串代码:
文件序号 <asp:textbox id="txtrollno" runat="server"> </asp:textbox> <br /> 选择文件 <asp:fileupload id="fileupload1" runat="server" /> <br /> <asp:button id="button1" runat="server" text="上传" onclick="button1_click" />
第四步:控件添加后,双击button,进入conversion.apxs.cs文件,添加以下命名空间:
using system; using system.data; using system.data.sqlclient; using system.io; using system.web;
然后在button1_click内编写代码,将图片转换为二进制流并通过sql语句保存到数据库中。
代码如下:
protected void button1_click(object sender, eventargs e) { if (!fileupload1.hasfile) { response.write("未选择文件"); return; } else { //创建访问上传文件的对象,并获取上传的文件 httppostedfile file = fileupload1.postedfile; //获取上传文件的文件名和扩展名 string filename = path.getfilename(fileupload1.postedfile.filename); string extension = path.getextension(filename); //实例化一个byte数组,其长度等于上传文件的长度 byte[] imagetype = new byte[file.contentlength]; //将文件数据读取到byte数组中 file.inputstream.read(imagetype, 0, file.contentlength); //判断图片格式 if ((extension == ".jpg") || (extension == ".png") || (extension == ".gif") || (extension == ".bmp")) { //表里写入数据 using (sqlconnection connection = new sqlconnection("data source=afod3-609221015;initial catalog=mydata;integrated security=true")) { connection.open(); sqlcommand cmd = new sqlcommand(); cmd.connection = connection; string commandtext = "insert into images values (@image, @rollno,@img,getdate())"; cmd.commandtext = commandtext; cmd.commandtype = commandtype.text; cmd.parameters.add("@image", sqldbtype.varbinary); cmd.parameters["@image"].value = imagetype; cmd.parameters.add("@rollno", sqldbtype.varchar); cmd.parameters["@rollno"].value = txtrollno.text; cmd.parameters.add("@img", sqldbtype.varchar); cmd.parameters["@img"].value = txtrollno.text; cmd.executenonquery(); cmd.dispose(); connection.close(); response.write("导入成功"); } } else { response.write("导入失败"); return; } }
运行结果如图:
这时我们就可以浏览文件夹添加需要存入的图片:
文件成功导入
如果选择了不符合条件的文件后,显示结果:
返回数据库,可以看到图片已经成功添加到数据库中了:
导出图片
现在我们看如何从数据库导出图片的,这里我会只使用button控件,简单概述一下。
第一步:在visual studio创建一个空网站,命名为“imagetobinary”。
第二步:再添加一个新页面,命名为"getimage.aspx"。在这个页面拖放一个button控件。
第三步: 双击button,进入”getimage.aspx.cs”,添加命名空间。
using system; using system.configuration; using system.data.sqlclient; using system.io;
button1_click内编写代码:
protected void button1_click(object sender, eventargs e) { string sconn = configurationmanager.appsettings["connectionstring"]; sqlconnection objconn = new sqlconnection(sconn); objconn.open(); string sql = "select * from images"; sqlcommand cmd = new sqlcommand(sql, objconn); sqldatareader dr = cmd.executereader(); while (dr.read()) { byte[] bytes = (byte[])dr["img"]; filestream fs = new filestream(@"e:\images\" + dr["roll_no"] + ".jpg" , filemode.create, fileaccess.write); fs.write(bytes, 0, bytes.length); fs.flush(); fs.close(); } dr.close(); objconn.close(); response.write("成功导出"); }
运行结果:
点击“导出”:
打开指定的文件夹,图片已经保存在里面了:
最后,如果有需要,你还可以参考这篇文章:如何保存pdf、word和excel文件到数据库中
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
下一篇: cad怎么快速准确地统计CAD建筑面积?