将图片保存到数据库的处理
来源:互联网 发布:奈何 君子以泽网络结局 编辑:程序博客网 时间:2024/05/16 08:35
其实将图片保存在数据库中不外乎两种方式。
1,图片文件保存在硬盘上,数据库中负责记录路径(不管是绝对路径还是相对路径)。
2,图片直接以二进制的形式保存在数据库中。
两者各有优势
1,存储的文件显而易见,而且实现方便。当然掉包也方便。
麻烦的地方就是管理,比如路径以及关联内容的识别管理。程序移植不变。
2,管理方便。全sql管理。图片文件及其相关的内容可以方便检索和识别。
不便就是写程序麻烦一点。当然这一点在现在来说,也是不值得一提。封装好的库包不需要再动脑筋想事。
还有就是当图片文件大和非常多的时候,将可能严重影响数据库的性能。
当然还有很多异同都可以自己体会,具体选择哪种方式,依据自身情况而定。
下面说说二进制保存的例子。
在将图片文件添加到数据库的时候,需要预处理一下。
1,将图片文件转换成二进制
2, 对二进制分析,提取文件数据,剔除头部和尾部
3, 然后就可以将二进制数据保存在对应的image类型的字段中了。
读取图片数据的时候,指定一下文件格式。图片就还原了。
这是一段n久前写的vb代码:
这段是页面上传图片文件的处理过程。request是form过来的。
又兴趣的可以研究下,不进行处理,数据库中的相应字段存放的内容是什么,然后在看看处理后,字段存放的二进制代码内容又有什么差异。
读取的时候:
function getSignature(id)
set rs=server.createobject("ADODB.recordset")
sql="select * from test_img where id=" & id
rs.open sql,conn,1,1
'Response.ContentType = "text/html" '显示图片的格式也可以用
Response.ContentType = "image/gif"' 以gif显示
'Response.ContentType = "image/jpg" '以jpg显示
Response.BinaryWrite rs("img") '显示图片
rs.close
end function
Java版本的处理过程。
这里需要注意 pstmt.setBinaryStream(2,fis,(int)file.length) 需要加(int)。 很奇怪的。
没有强制转换,居然能报错。虽然file.length()返回的是long。抑或sun还需要在加个函数setBinaryStream(int,InputStream,long)重载一下。
Exception in thread "main" java.lang.AbstractMethodError: com.microsoft.jdbc.base.BasePreparedStatement.setBinaryStream(ILjava/io/InputStream;J)V
为什么这段Java代码没有预处理呢,只能归功于java.sql中已经实现了,我们就随便用就行了。
再补充一个例子的二进制文件:
这个是图片文件存储到数据库中的二进制表示形式:
而在本地磁盘中,文件的二进制表示形式为:
- 将图片保存到数据库的处理
- 将Image类型的图片文件保存到Mysql数据库
- 将图片保存到数据库中
- VC++ 将图片保存到数据库
- android 将图片保存到数据库
- 将图片保存到SQL数据库中
- 如何将图片保存到sql数据库
- jdbc将图片保存到数据库
- Flex上传图片,将图片保存以二进制流的方式保存到数据库。
- php将图片保存到mysql数据库及从数据库中读取图片的方法源码
- php将图片保存到mysql数据库及从数据库中读取图片的方法源码
- php将图片保存到mysql数据库及从数据库中读取图片的方法源码
- php将图片保存到mysql数据库及从数据库中读取图片的方法源码
- 保存图片到数据库
- 保存图片到数据库
- 保存图片到数据库
- 保存图片到数据库
- 保存图片到数据库
- 数值数据库的结构
- 开始写blog,记录我的学习生活
- js中escape,encodeURI,encodeURIComponent三个函数的区别
- Web测试要点【转】
- Javascript中Class的定义
- 将图片保存到数据库的处理
- Grails入门教程(二)
- SQLPLUS辅助bat
- IE 解析document.write
- 09年银行业经营业绩将实现增长
- 书目数据库的结构
- 解决oracle report 10g 连接不到数据库实例的问题
- 朋友们,请给我松绑
- 做人应该知道的十个道理