向数据库存储读取图片方法总结
来源:互联网 发布:java基础的阶段的项目 编辑:程序博客网 时间:2024/04/28 06:36
1.首先创建一个数据表SaveImageTest
ImageID:uniqueidentifier 主键
ImageType:varchar(32) 图片类型
ImageName:varchar(128) 图片名称
ImageContent:image 图片内容
ImageUrl:varchar(128) 图片存储路径
2.向数据库存储图片
2.1使用字节流的方式获取上传图片的内容
#region 获取图片内容方法一:通用方法,用用文件流的方式读取图片内容 //读取图片流 imgStream.Read(imageContent, 0, imageSize); imgStream.Close(); #endregion
2.2使用上传文件控件的GetByte属性获取图片内容
#region 获取图片方法二:快捷方法 用上传控件的属性获取上传文件的字节数组 imageContent = fupLoadImage.FileBytes; #endregion
3.从数据库读取图片内容,显示在页面
3.1读取流,直接显示在当前页面
/// <summary> /// 读取图片方法1,触发后直接显示在本页面,但图片显示后其他控件不可见 /// </summary> private void ReadImage() { string sql = string.Format("SELECT * FROM SaveImageTest where ImageID='93B23E88-1F56-4C9E-BFAF-67126E1389B2' "); SqlDataReader sqlRead = kpSql.ReadStu(sql, false); while (sqlRead.Read()) { Response.ContentType = sqlRead["ImageType"].ToString(); Response.BinaryWrite((byte[])sqlRead["ImageContent"]); } kpSql.CloseConn(); }
3.2使用Image控件显示图片
为了灵活展示图片,满足实际需求,可添加一个新的页面,并用读取流的方法读取图片,将路径赋值给本页面的Image控件的ImageUrl即可
/// <summary> /// 读取数据库图片方法二 /// 在本页面的适当位置添加image服务器控件,将需要的图片显示在另一个页面,给image控件的url赋值即可 /// </summary> private void ReadImage2() { this.imgReadImage.ImageUrl = "OutPutImage.aspx"; }
4.利用路径实现图片的保存及读取
在实际的使用中,往往在服务器中占用一点硬盘控件直接利用图片的路径实现存储和读取,这样不仅能节省数据库空间,也方便频繁的读取存储操作,同时更加安全。
4.1利用路径存储图片
#region 方法三:将 图片保存至指定文件夹下 //虚拟路径转化为物理路径用Server.MapPath() //if (!Directory.Exists(Server.MapPath("E:\\资料\\ImageStorgeTest\\"))) if (!Directory.Exists("E:\\资料\\ImageStorgeTest\\")) { //若不存在路径则创建该文件夹 Directory.CreateDirectory("E:\\资料\\ImageStorgeTest\\"); //已存在该图片则,生成新的文件名,不覆盖 if (Directory.Exists("E:\\资料\\ImageStorgeTest\\" + imageName)) { imageUrl=imageUrlBase+Path.GetFileNameWithoutExtension(fupLoadImage.PostedFile.FileName)+"副本"+Path.GetExtension(fupLoadImage.PostedFile.FileName); } } fupLoadImage.PostedFile.SaveAs(imageUrl); #endregion
4.2利用路径读取图片
前台控件定义:
<td colspan="4"> 方法四: <img id="imgReadImageByUrl" runat="server" alt="" width="100" height="150" /> </td>
/// <summary> /// 根据图片存储的路径,赋值给Img标签控件获取图纸 /// </summary> private void ReadImage4() { string sql = string.Format("SELECT * FROM SaveImageTest where ImageID='724B53A8-C6E1-4FFC-BC68-D82B743A7846' "); DataTable dt= kpSql.ExceTable(sql, "SaveImageTest"); if (dt.Rows.Count > 0) { this.imgReadImageByUrl.Src = @"E:\\资料\\ImageStorgeTest\\" + dt.Rows[0]["ImageName"].ToString(); } }
附:全部代码如下
#region 事件函数 /// <summary> /// 点击确定存储图片到数据库中 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnSelectImage_Click(object sender, EventArgs e) { //图片类型是否允许上传 bool flag = false; if (fupLoadImage.HasFile) { //获取文件扩展名 string fileExtension = Path.GetExtension(fupLoadImage.FileName).ToUpper(); string[] allowExtension = { ".JPG", ".GIF", ".PNG" }; for (int i = 0; i < allowExtension.Length; i++) { if (allowExtension[i].Equals(fileExtension)) { flag = true; break; } } //类型匹配,可以上传 if (flag) { string sqlStr = ConfigurationManager.AppSettings["ConnectionString"].ToString(); SqlConnection sqlConn = new SqlConnection(sqlStr); //上传文件的大小 int imageSize = fupLoadImage.PostedFile.ContentLength; string imaType = fupLoadImage.PostedFile.ContentType; Stream imgStream = fupLoadImage.PostedFile.InputStream; //fupLoadImage.PostedFile.FileName包含完全路径的名字 string imageName = Path.GetFileName(fupLoadImage.PostedFile.FileName); string imageUrlBase = "E:\\资料\\ImageStorgeTest\\"; string imageUrl = imageUrlBase + imageName; byte[] imageContent = new byte[imageSize]; #region 获取图片内容方法一:通用方法,用用文件流的方式读取图片内容 //读取图片流 imgStream.Read(imageContent, 0, imageSize); imgStream.Close(); #endregion #region 获取图片方法二:快捷方法 用上传控件的属性获取上传文件的字节数组 imageContent = fupLoadImage.FileBytes; #endregion #region 方法三:将 图片保存至指定文件夹下 //虚拟路径转化为物理路径用Server.MapPath() //if (!Directory.Exists(Server.MapPath("E:\\资料\\ImageStorgeTest\\"))) if (!Directory.Exists("E:\\资料\\ImageStorgeTest\\")) { //若不存在路径则创建该文件夹 Directory.CreateDirectory("E:\\资料\\ImageStorgeTest\\"); //已存在该图片则,生成新的文件名,不覆盖 if (Directory.Exists("E:\\资料\\ImageStorgeTest\\" + imageName)) { imageUrl = imageUrlBase + Path.GetFileNameWithoutExtension(fupLoadImage.PostedFile.FileName) + "副本" + Path.GetExtension(fupLoadImage.PostedFile.FileName); } } fupLoadImage.PostedFile.SaveAs(imageUrl); #endregion string sql = @"INSERT INTO SaveImageTest(ImageID,ImageType,ImageName,ImageContent,ImageUrl) VALUES(NEWID(),@imaType,@imageName,@imageContent,@imageUrl)"; SqlCommand comm = new SqlCommand(sql, sqlConn); SqlParameter paramImageType = new SqlParameter("@imaType", SqlDbType.VarChar, 50); paramImageType.Value = imaType; comm.Parameters.Add(paramImageType); SqlParameter paramImageName = new SqlParameter("@imageName", SqlDbType.VarChar, 64); paramImageName.Value = imageName; comm.Parameters.Add(paramImageName); SqlParameter paramImageContent = new SqlParameter("@imageContent", SqlDbType.Image); paramImageContent.Value = imageContent; comm.Parameters.Add(paramImageContent); SqlParameter paramImageUrl = new SqlParameter("@imageUrl", SqlDbType.VarChar, 128); paramImageUrl.Value = imageUrl; comm.Parameters.Add(paramImageUrl); sqlConn.Open(); int numRowsAffected = comm.ExecuteNonQuery(); sqlConn.Close(); } } } #endregion #region 自定义功能函数 /// <summary> /// 读取图片方法1,触发后直接显示在本页面,但图片显示后其他控件不可见 /// </summary> private void ReadImage() { string sql = string.Format("SELECT * FROM SaveImageTest where ImageID='93B23E88-1F56-4C9E-BFAF-67126E1389B2' "); SqlDataReader sqlRead = kpSql.ReadStu(sql, false); while (sqlRead.Read()) { Response.ContentType = sqlRead["ImageType"].ToString(); Response.BinaryWrite((byte[])sqlRead["ImageContent"]); } kpSql.CloseConn(); } /// <summary> /// 读取数据库图片方法二 /// 在本页面的适当位置添加image服务器控件,将需要的图片显示在另一个页面,给image控件的url赋值即可 /// </summary> private void ReadImage2() { this.imgReadImage.ImageUrl = "OutPutImage.aspx"; } private void ReadImage3() { string sql = string.Format("SELECT * FROM SaveImageTest where ImageID='724B53A8-C6E1-4FFC-BC68-D82B743A7846'"); DataTable dt = kpSql.ExceTable(sql, "SaveImageTest"); byte[] img = (byte[])dt.Rows[0]["ImageContent"]; kpSql.CloseConn(); MemoryStream ms = new MemoryStream(img, 0, img.Length); PictureBox picture1 = new PictureBox(); picture1.Top = 160; picture1.Left = 200; picture1.Image = Image.FromStream(ms); } /// <summary> /// 根据图片存储的路径,赋值给Img标签控件获取图纸 /// </summary> private void ReadImage4() { string sql = string.Format("SELECT * FROM SaveImageTest where ImageID='724B53A8-C6E1-4FFC-BC68-D82B743A7846' "); DataTable dt = kpSql.ExceTable(sql, "SaveImageTest"); if (dt.Rows.Count > 0) { this.imgReadImageByUrl.Src = @"E:\\资料\\ImageStorgeTest\\" + dt.Rows[0]["ImageName"].ToString(); } } #endregion
- 向数据库存储读取图片方法总结
- 向数据库存储读取图片方法总结
- 向数据库存储读取图片方法总结
- 向数据库存储读取图片方法总结
- 向数据库存储并读取图片的实现
- C# 向SQL数据库中存储图片的方法
- C# 向SQL数据库中存储图片的方法
- 用c#向SQL Server中存储图片并且再从数据库中读取图片
- c#向SQL Server中存储图片并且再从数据库中读取图片
- 数据库图片存储也读取
- 数据库Mysql存储,读取图片
- java jdbc(三)应用实例--向数据库中存储,读取图片和文件
- C# 向MySQL数据库存储及读取图片、音乐等文件
- JavaSE-向数据库保存图片并且读取
- 从MySQL数据库读取图片和向数据库插入图片
- python 向mysql中存储图片以及读取图片
- PHP读取数据库中存储的图片
- 如何向DB2中存储和读取图片
- document的路径及路径下所有的资源,切割图片
- Zend Framework框架编程完整攻略(5)
- Android Animation学习笔记
- Function to automatic obtain the FTP path
- 有了MaKey Makey 石头也能变钢琴
- 向数据库存储读取图片方法总结
- toString()
- nginx 如何安装 nginx upload module?
- Zend Framework框架编程完整攻略(6)
- Java使用JNI调用C/C++的DLL动态链接库1
- 在tomcat中发布项目时,用IP地址不能访问项目而用localhost时可以访问成功
- IT项目带新人经验
- (KMP算法)Power String(P2406)
- C# where 子句用法