java 在MySQL中存储文件,读取文件(包括图片,word文档,excel表格,ppt,zip文件等)
转自:https://blog.csdn.net/u014475796/article/details/49893261
在设计到数据库的开发中,难免要将图片或文档文件(如word)插入到数据库中的情况。一般来说,我们可以通过插入文件相应的存储路径,而不是文件本身,来避免直接向数据库里插入的麻烦。但有些时候,直接向MySQL中插入文件,更加安全,而且更加容易管理。
首先,先要在数据库中建表。我在名为test的数据库下建立了一个叫pic的表。该表包括3列,id, caption和img。其中id是主键,caption是对图片的表述,img是图像文件本身。建表的SQL语句如下:
- DROP TABLE IF EXISTS `test`.`pic`;
- CREATE TABLE `test`.`pic` (
- `id` int(11) NOT NULL auto_increment,
- `caption` varchar(45) NOT NULL default '',
- `img` longblob NOT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
其次,在java中对文件(如图片,word文档等)的处理,其中包括把文件存储到数据库和从数据库中读取文件。(注:storeImg()和readImg()是可以处理任意文件类型的,不仅仅是图片)
</pre><pre name="code" class="sql"> 在数据库里存储文件以及从数据库读取文件的完整代码如下:
- <pre name="code" class="java">import java.io.*;
- import java.sql.*;
- public class StoreFile {
- private String dbDriver;
- private String dbURL;
- private String dbUser;
- private String dbPassword;
- private Connection con;
- private PreparedStatement ps;
- /**
- * 构造函数,初始化数据库的连接
- *
- */
- public StoreFile() {
- dbDriver = "com.mysql.jdbc.Driver";
- dbURL = "jdbc:mysql://localhost:3306/test";
- dbUser = "root";
- dbPassword = "justdoit";
- initDB();
- }
- public StoreFile(String strDriver, String strURL,
- String strUser, String strPwd) {
- dbDriver = strDriver;
- dbURL = strURL;
- dbUser = strUser;
- dbPassword = strPwd;
- initDB();
- }
- public void initDB() {
- try {
- // Load Driver
- Class.forName(dbDriver).newInstance();
- // Get connection
- con = DriverManager.getConnection(dbURL,
- dbUser, dbPassword);
- } catch(ClassNotFoundException e) {
- System.out.println(e.getMessage());
- } catch(SQLException ex) {
- // handle any errors
- System.out.println("SQLException: " + ex.getMessage());
- System.out.println("SQLState: " + ex.getSQLState());
- System.out.println("VendorError: " + ex.getErrorCode());
- } catch (Exception e) {
- System.out.println(e.getMessage());
- }
- }
- /**
- * 将指定路径的文件(比如:图片,word文档等)存储到数据库
- * @param strFile 要存放到数据库的文件路径,如D:\\a.jpg
- */
- public void storeImg(String strFile) throws Exception {
- int id = 0;
- File file = new File(strFile);
- FileInputStream fis = new FileInputStream(file);
- try {
- ps = con.prepareStatement("insert "
- + "into PIC values (?,?,?)");
- ps.setInt(1, id);
- ps.setString(2, file.getName());
- ps.setBinaryStream(3, fis, (int) file.length());
- ps.executeUpdate();
- System.out.println("file insert success ");
- } catch (SQLException e) {
- System.out.println("SQLException: "
- + e.getMessage());
- System.out.println("SQLState: "
- + e.getSQLState());
- System.out.println("VendorError: "
- + e.getErrorCode());
- e.printStackTrace();
- } finally {
- ps.close();
- fis.close();
- con.close();
- }
- }
- /**
- * 将存储在数据库中的文件(比如:图片,word文档等)读取到指定路径
- * @param path 从数据库里读取出来的文件存放路径 如D:\\a.jpg
- * @param id 数据库里记录的id
- */
- public void readImg(String path, int id) throws Exception{
- initDB(); //建立与数据库的连接
- byte[] buffer = new byte[4096];
- FileOutputStream outputImage = null;
- InputStream is = null;
- try {
- ps = con.prepareStatement("select img from pic where id =?");
- ps.setInt(1, id);
- ResultSet rs = ps.executeQuery();
- rs.next();
- File file = new File(path);
- if (!file.exists()) {
- file.createNewFile();
- }
- outputImage = new FileOutputStream(file);
- Blob blob = rs.getBlob("img"); //img为数据库存放图片字段名称
- is = blob.getBinaryStream();
- int size = 0;
- while ((size = is.read(buffer)) != -1) {
- outputImage.write(buffer, 0, size);
- }
- System.out.println("file read success ");
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- is.close();
- outputImage.close();
- ps.close();
- con.close();
- }
- }
- public static void main(String[] args) throws Exception {
- StoreFile sp = new StoreFile();
- String imgPath="C:\\Users\\Administrator\\Pictures\\img12.jpg";
- //String wordPath="d:\\测试文档.docx";
- sp.storeImg(imgPath);
- //sp.storeImg(wordPath);
- //sp.readImg("D://数据库.jpg", 1); //这里的1为要传入的参数:读取文件的id
- //sp.readImg("D://数据库.docx", 8);
- }
- }
java 在MySQL中存储文件,读取文件(包括图片,word文档,excel表格,ppt,zip文件等)的更多相关文章
- ABBYY将JPEG文件转换成Word文档的方法
日常工作中处理JPEG格式的图像文件时,有时需要转换成Word文档进行编辑,市场上应用而生了很多转换工具,相信不少人听说过OCR(光学字符识别)软件,可以用来转换图像文件,而在OCR软件中, ABBY ...
- 如何使用ABBYY FineReader 12将JPEG文件转换成Word文档
日常工作中处理JPEG格式的图像文件时,有时需要转换成Word文档进行编辑,市场上应用而生了很多转换工具,相信不少人听说过OCR(光学字符识别)软件,可以用来转换图像文件,而在OCR软件中, ABBY ...
- C# : 操作Word文件的API - (将C# source中的xml注释转换成word文档)
这篇博客将要讨论的是关于: 如何从C#的source以及注释, 生成一份Word格式的关于各个类,函数以及成员变量的说明文档. 他的大背景如下...... 最近的一个项目使用C#, 分N个模块, 在项 ...
- springboot中使用freemarker生成word文档并打包成zip下载(简历)
一.设计出的简历模板图以及给的简历小图标切图 二.按照简历模板图新建简历word文件 :${字段名},同时将图片插入到word中,并将建好的word文件另存为xml文件: 三.直 ...
- 在项目中利用TX Text Control进行WORD文档的编辑显示处理
在很多文档管理的功能模块里面,我们往往需要对WORD稳定进行展示.编辑等处理,而如果使用微软word控件进行处理,需要安装WORD组件,而且接口使用也不见得简单易用,因此如果有第三方且不用安装Offi ...
- 将word文档A表格中的内容拷贝到word文档B表格中
Function IsFileExists(ByVal strFileName As String) As Boolean ) <> Empty Then IsFileExists = T ...
- 新建WORD文档打开会出现转换文件对话框3步解决办法
1.选择“纯文本”格式打开word文件. ------------------------------------------------------------------------------ ...
- pdf及word文档的读取 pyPDF2,docx
#!python3 #-*- coding:utf8 -*- #PyPDF2可能会打不开某些pdf文档,也不能提取图片,图表或者其他媒介从PDF文件中.但是它能提取文本从PDF中,转化为字符. imp ...
- 利用POI操作不同版本号word文档中的图片以及创建word文档
我们都知道要想利用java对office操作最经常使用的技术就应该是POI了,在这里本人就不多说到底POI是什么和怎么用了. 先说本人遇到的问题,不同于利用POI去向word文档以及excel文档去写 ...
随机推荐
- 使用Python scikit-learn 库实现神经网络算法
1:神经网络算法简介 2:Backpropagation算法详细介绍 3:非线性转化方程举例 4:自己实现神经网络算法NeuralNetwork 5:基于NeuralNetwork的XOR实例 6:基 ...
- HDU 2612 Find a way bfs 难度:1
http://acm.hdu.edu.cn/showproblem.php?pid=2612 bfs两次就可将两个人到达所有kfc的时间求出,取两人时间之和最短的即可,这个有点不符合实情,题目应该出两 ...
- History of programming language
1940之前 第一个编程语言比现代的计算机还早诞生.首先,这种语言是种编码(en:code). 于1801年发明的提花织布机(或称甲卡提花织布机,英文:en:Jacquard loom),运用打孔卡上 ...
- centos6 Nginx+Tomcat负载均衡配置
一.Nginx简介 Nginx是一个web服务器也可以用来做负载均衡及反向代理使用,目前使用最多的就是负载均衡,具体简介我就不介绍了百度一下有很多,下面直接进入安装步骤 二.Nginx安装 1.下载N ...
- C++ wait捕捉的信号处理WIFEXITED/WEXITSTATUS/WIFSIGNALED
当一个进程正常或异常终止的时候,内核就像其父进程发送SIGCHLD信号,因为子进程是个异步事件,所以这种信号也是内核给那个父进程发的异步通知.父进程可以选择忽略该信号,或者提供一个该信号发生时即被调用 ...
- AI产业将更凸显个人英雄主义 周志华老师的观点是如此的有深度
今天无意间在网上看的了一则推送,<周志华:AI产业将更凸显个人英雄主义> http://tech.163.com/18/0601/13/DJ7J39US00098IEO.html 摘录一些 ...
- 这是C语言结课前(期末考试之前)写给牛晓霞的一封信!
致尊敬的牛晓霞老师: 这是黄领衫的感想,也是想告诉你的话! 在老师说要给班里写得好的人发黄领衫的时候,我当时的想法是我很有可能拿到这份奖品的,怎么说呢,算是一种自信吧,或是对自己的态度的认可.虽然我能 ...
- SpringBoot实现网站注册,邮件激活码激活功能
项目源码:https://gitee.com/smfx1314/springbootemail 上一篇文章已经讲到如何springboot如何实现邮件的发送,趁热打铁,这篇文章实现如下功能. 很多网站 ...
- linux关于ftp查看不到文件列表的问题
今天配置linux服务器的ftp后,登录都正常,使用ftp工具登录后,所有目录都可以通过手工写路径访问,但是文件夹和文件列表看不到数据. 后来分析,总结原因得出结果是跟selinux有关,于是通过关闭 ...
- Python自然语言处理(1):初识NLP
由于我们从美国回来就是想把医学数据和医学人工智能的事认真做起来,所以我们选择了比较扎实的解决方法,想快速出成果的请绕道.我们的一些解决方法是:1.整合公开的所有医学词典,尽可能包含更多的标准医学词汇: ...