数据库二进制存储与显示图片:实战教程与代码示例
在数据库中处理图片的二进制存储和显示是一个常见的需求,特别是在Web应用程序中,用户上传、管理或展示图片时。本文档将详细介绍如何实现这一功能,包括两个关键部分:图片的上传(图片路径转二进制)和图片的查询与显示。 **1. 图片上传到数据库** 首先,通过以下步骤实现图片的上传: - **获取图片路径和二进制数据**: 使用`FileStream`类打开指定路径的图片文件,并创建`BinaryReader`来读取其二进制内容。例如,`FileStream fs = new FileStream(strPath, FileMode.Open, FileAccess.Read)`,然后调用`BinaryReader br = new BinaryReader(fs)`,读取整个图片文件到一个`byte[]`数组中。 - **设置数据库连接**: 建立到数据库的连接,这里以SQL Server为例,`SqlConnection myConn = new SqlConnection("DataSource=127.0.0.1;InitialCatalog=TestDB;UserID=sa;Password=sa")`。 - **构造SQL插入语句**: 根据数据库表结构(如`personPhoto`表),构造一个插入命令,如`strComm = "INSERT INTO personPhoto(personName, personPhotoPath, personPhoto) VALUES(@personName, @personPhotoPath, @photoBinary)"`,其中`@photoBinary`是预定义的参数用于存储二进制图片数据。 - **设置参数并执行**: 创建`SqlCommand`对象,添加`SqlParameter`来对应图片二进制数据,设置长度和值。然后打开连接,执行插入操作,确保关闭连接。 **2. 从数据库查询图片并显示** 对于图片的查询和显示,可以采用类似的方法: - **重新建立数据库连接**: 使用相同的连接字符串。 - **构建查询语句**: 根据需要的字段(如`personPhoto`),构造一个查询,例如`string sql = "SELECT personPhoto FROM personPhoto WHERE personName = 'wangwu'";` - **执行查询并获取二进制数据**: 使用`SqlCommand`执行查询,并获取与图片相关的二进制数据。 - **处理和显示图片**: 获取到二进制数据后,可能需要将其转换为`byte[]`数组或特定的输出格式,然后在服务器端或前端根据需求显示。这可以通过HTTP响应头设置`Content-Type`为`image/jpeg`或`image/png`,然后发送给浏览器进行显示。 **GridView的使用** 如果涉及到在GridView控件中显示图片,可以使用`GridViewImageField`。首先,将图片列设置为`ImageUrl`属性,如`<asp:GridView ...><Columns><asp:GridViewImageField ImageUrl="~/photo/{0}" /></Columns>`。这样,当查询结果返回图片数据时,GridView会自动根据`ImageUrl`路径显示图片。 总结来说,数据库中图片的二进制存储和显示主要涉及文件读取、数据库操作(插入和查询)、二进制数据的处理以及页面上的展示。这不仅涉及底层IO操作,还有对数据库的SQL语句理解和对前端展示技术的应用。在实际开发中,需要注意安全性和性能优化,比如对大图片的处理和数据库索引的设置。
1.将图片以二进制存入数据库
2.读取二进制图片在页面显示
3.设置Image控件显示从数据库中读出的二进制图片
4.GridView中ImageField以URL方式显示图片
5.GridView显示读出的二进制图片
====================
1.将图片以二进制存入数据库
//保存图片到数据库
protected void Button1_Click(object sender, EventArgs e)
{
//图片路径
string strPath = "~/photo/03.JPG";
string strPhotoPath = Server.MapPath(strPath);
//读取图片
BinaryReader br = new BinaryReader(fs);
byte[] photo = br.ReadBytes((int)fs.Length);
br.Close();
fs.Close();
//存入
SqlConnection myConn = new SqlConnection("Data Source=127.0.0.1;Initial Catalog=TestDB;User ID=sa;Password=sa");
string strComm = " INSERT INTO personPhoto(personName, personPhotoPath, personPhoto) ";
strComm += " VALUES('wangwu', '" + strPath + "', @photoBinary )";
SqlCommand myComm = new SqlCommand(strComm, myConn);
myComm.Parameters.Add("@photoBinary", SqlDbType.Binary,photo.Length);
myComm.Parameters["@photoBinary"].Value = photo;
myConn.Open();
myComm.ExecuteNonQuery();
myConn.Close();
剩余8页未读,继续阅读
- 粉丝: 2
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 前端面试必问:真实项目经验大揭秘
- 永磁同步电机二阶自抗扰神经网络控制技术与实践
- 基于HAL库的LoRa通讯与SHT30温湿度测量项目
- avaWeb-mast推荐系统开发实战指南
- 慧鱼SolidWorks零件模型库:设计与创新的强大工具
- MATLAB实现稀疏傅里叶变换(SFFT)代码及测试
- ChatGPT联网模式亮相,体验智能压缩技术.zip
- 掌握进程保护的HOOK API技术
- 基于.Net的日用品网站开发:设计、实现与分析
- MyBatis-Spring 1.3.2版本下载指南
- 开源全能媒体播放器:小戴媒体播放器2 5.1-3
- 华为eNSP参考文档:DHCP与VRP操作指南
- SpringMyBatis实现疫苗接种预约系统
- VHDL实现倒车雷达系统源码免费提供
- 掌握软件测评师考试要点:历年真题解析
- 轻松下载微信视频号内容的新工具介绍