图片二进制上传需要用到一个命名空间,using System.IO,很多刚开始初学ASP.NET可能很少用这个。我这个比较适合ASP.NET .netframework4.0以下的初学者。
先上.aspx前端控件代码,设置两个简单控件(拖动就行)
<asp:FileUpload ID="FileUpload1" runat="server" />
<br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
再来后端代码,我将进行分步写
首先要引进这些命名空间,包括MySQL库,系统数据操作库以及系统输入输出操作库
using System.IO;
using MySql.Data.MySqlClient;
using System.Data;
接着写上fileupload上传方式,这个是可以上传完后删除的。要图片数据数据写入数据库后才能删除。我这里卸载前面的Button控件创立的函数中
首先先进行的是上传工作。这个部分代码可以单独用,专门用来管理上传的。不过这里没用try来纠错,后面自己加就行了。
string filename = FileUpload1.FileName;
string nametession = filename.Substring(filename.LastIndexOf(".") + 1);
string savemap = Server.MapPath("fileupload/") + filename;
if (nametession.ToLower() == "jpg" || nametession.ToLower() == "bmp")//这个可以很多种上传格式,能改就行
{
FileUpload1.PostedFile.SaveAs(savemap);
}
上面的是上传方式,我将后面一部分给除去了,如果只是单纯的想用图片的路径保存在数据库,将路径存到数据库就行。为了方便,我还是将后面的代码写入上面那个判断中。完整的图片以二进制方式存入数据库代码方式。注意中间的MySqlParameter以及MySqlDbType,如果是不同数据库,就写相应的名称就行。大家注意看里面的注释进行理解
string filename = FileUpload1.FileName;
string nametession = filename.Substring(filename.LastIndexOf(".") + 1);
string savemap = Server.MapPath("fileupload/") + filename;
if (nametession.ToLower() == "jpg" || nametession.ToLower() == "bmp")
{
FileUpload1.PostedFile.SaveAs(savemap);
/*接着上面的代码*/
byte[] by = new byte[FileUpload1.PostedFile.ContentLength];//图片以二进制上传需要用到byte数组存储
Stream st = FileUpload1.PostedFile.InputStream;//关键一步,读取上传的文件
st.Read(by, 0, FileUpload1.PostedFile.ContentLength);//关键一步,将上传文件数组进行读取,注意三个参数,字符组,偏移数以及长度,缺一不可
string mysqlcon = System.Configuration.ConfigurationManager.ConnectionStrings["ConnString"].ToString();//数据库连接字符串
/*上面连接可以写成
string mysqlcon = Data Source=*测试一般用localhost*;User ID=root;Password=*自己写密码*;DataBase=*你的数据库* */
MySqlConnection con = new MySqlConnection(mysqlcon);
con.Open();
string strsql = "INSERT INTO b(pic)VALUES(@pic)";
MySqlCommand com = new MySqlCommand(strsql,con);//这个要写在前面,否则无效
com.Parameters.Add(new MySqlParameter("@pic",MySqlDbType.Blob));//添加参数
/*一定要用为数据库变量赋值这种方式,要不然数组无法直接保存到mysql,输入到数据库的值永远为System.Byte[],转换为十六进制到数据库则数据库只能是文本十六进制*/
com.Parameters["@pic"].Value = by;//给参数赋值
com.ExecuteNonQuery();
com.Dispose();
con.Close();
con.Dispose();
}
else
{
Response.Redirect("<script>alert('error!');</script>");
}
大功告成,用Navicat自己看一下,选这里