java图片保存文件到数据库_java保存图片内容到数据库
本文使用mysql数据库举例插入图片到数据库和从数据库取出图片在页面显示:
一、建表
创建一个测试保存图片的表
create table t_save_img(
name varchar(200), 文件名称
img longblob ,
primary key(name)
)
二、建实体类:SaveImageInfo
private String name; //文件名称
private byte[] bt; //字节数组
三、数据源配置
db.properties文件
test.driver=com.mysql.jdbc.Driver
test.url=jdbc:mysql://127.0.0.1:3306/dg?CharacterEncoding=GBK
test.user=root
test.password=root
四、数据库连接的工具类
package com.test.util;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
/**
*
*@类功能说明:获取数据库连接和释放数据库连接的工具类
*@修改人员名: yang
*@修改日期: 2015-11-28 下午03:48:11
*@修改内容:
*@修改次数:
*@创建时间: 2015-11-28 下午03:48:11
*@版本:V1.0
*/
public class JdbcUtil {
private static Properties prop=new Properties();
private final static ThreadLocal tdl=new ThreadLocal();
//静态代码块,保证得到的连接是唯一的
static{
try {
InputStream is=JdbcUtil.class.getResourceAsStream("/db/db.properties");
prop.load(is);
Class.forName(prop.getProperty("test.driver"));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
//获取连接
public Connection getConn() throws Exception{
Connection conn=null;
try {
//获得当前数据库连接线程
conn=tdl.get();
conn=DriverManager.getConnection(prop.getProperty("test.url"),
prop.getProperty("test.user"), prop.getProperty("test.password"));
tdl.set(conn);
} catch (SQLException e) {
throw new RuntimeException(e);
}
return conn;
}
//释放连接
public void releaseConn(Connection conn,PreparedStatement pstm,ResultSet rs)throws Exception{
try{
if(conn!=null){
tdl.remove();
conn.close();
}
if(pstm!=null){
pstm.close();
}
if(rs!=null){
rs.close();
}
}catch(Exception e){
throw new RuntimeException(e);
}
}
}
五、开始实现保存图片和显示图片
DAO的代码如下:
package com.test.dao;
import java.io.BufferedInputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.test.util.JdbcUtil;
/**
*
*@类功能说明:保存图片到数据库的实现类
*@修改人员名: yang
*@修改日期: 2015-11-28 下午04:28:07
*@修改内容:
*@修改次数:
*@创建时间: 2015-11-28 下午04:28:07
*@版本:V1.0
*/
public class ISaveImageToDataDAOImpl {
//添加图片
public void insertImageInfo(String name,byte[] img)throws Exception{
Connection conn=null;
PreparedStatement pstm=null;
JdbcUtil jdbc=null;
StringBuffer sb=null;
try{
sb=new StringBuffer();
jdbc=new JdbcUtil();
conn=jdbc.getConn();
StringBuffer sql=sb.append("insert into t_save_img values(?,?) ");
pstm=conn.prepareStatement(sql.toString());
pstm.setString(1, name);
pstm.setBytes(2, img); //以字节数组的形式写入
pstm.executeUpdate();
}catch(Exception e){
throw new RuntimeException(e);
}finally{
jdbc.releaseConn(null, pstm, null);
}
}
//获取图片
public BufferedInputStream selectOneImage(String name)throws Exception{
BufferedInputStream bufferImage=null;
Connection conn=null;
PreparedStatement pstm=null;
ResultSet rs=null;
JdbcUtil jdbc=null;
StringBuffer sb=null;
try{
sb=new StringBuffer();
jdbc=new JdbcUtil();
conn=jdbc.getConn();
StringBuffer sql=sb.append("select name,img from t_save_img where name=? ");
pstm=conn.prepareStatement(sql.toString());
pstm.setString(1, name);
rs=pstm.executeQuery();
while(rs.next()){
//必须强制类型转换
Blob blob=(Blob)rs.getBlob("img");
bufferImage=new BufferedInputStream(blob.getBinaryStream());
}
}catch(Exception e){
throw new RuntimeException(e);
}finally{
jdbc.releaseConn(null, pstm, null);
}
return bufferImage;
}
}
service代码
package com.test.service;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.nio.ByteBuffer;
import java.sql.Connection;
import java.sql.SQLException;
import com.test.dao.ISaveImageToDataDAOImpl;
import com.test.util.JdbcUtil;
public class ISaveImageServiceImpl {
private ISaveImageToDataDAOImpl saveImageDAO=new ISaveImageToDataDAOImpl();
public void saveImage(String name,String imgPath) throws Exception{
Connection conn=null;
JdbcUtil jdbc=null;
byte []img=null;
try{
jdbc=new JdbcUtil();
conn=jdbc.getConn();
conn.setAutoCommit(false);
File file=new File(imgPath);
//读入内存
FileInputStream fis=new FileInputStream(file);
//建立缓冲区
ByteBuffer bbf=ByteBuffer.allocate((int)file.length());
byte[]array=new byte[1024];
int length=0;
//开始读取和存放数据
while((length=fis.read(array))>0){
if(length!=1024){
bbf.put(array,0,length);
}else{
bbf.put(array);
}
}
//关闭输入流
fis.close();
//获取需要写的内容
img=bbf.array();
saveImageDAO.insertImageInfo(name, img);
conn.commit();
}catch(Exception e){
try {
conn.rollback();
} catch (SQLException e1) {
throw new RuntimeException(e1);
}
throw new RuntimeException(e);
}finally{
jdbc.releaseConn(conn, null, null);
}
}
public BufferedInputStream getImage(String imgName)throws Exception{
Connection conn=null;
JdbcUtil jdbc=null;
BufferedInputStream bg=null;
try{
jdbc=new JdbcUtil();
conn=jdbc.getConn();
conn.setAutoCommit(false);
//获取缓冲流
bg=saveImageDAO.selectOneImage(imgName);
conn.commit();
}catch(Exception e){
try {
conn.rollback();
} catch (SQLException e1) {
throw new RuntimeException(e1);
}
throw new RuntimeException(e);
}finally{
jdbc.releaseConn(conn, null, null);
}
return bg;
}
}
action获取图片的代码
package com.test.action.img;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.test.service.ISaveImageServiceImpl;
/**
*
*@类功能说明:获取数据库图片,并且显示
*@修改人员名: yang
*@修改日期: 2015-11-29 上午10:29:26
*@修改内容:
*@修改次数:
*@创建时间: 2015-11-29 上午10:29:26
*@版本:V1.0
*/
@SuppressWarnings("serial")
public class ShowImgAction extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
ISaveImageServiceImpl iis=new ISaveImageServiceImpl();
BufferedInputStream bis=null;
BufferedImage image = null;
try{
//获取service中返回的缓冲流
bis=iis.getImage("da");
image=ImageIO.read(bis);
//写给客户端,只能是静态图片jpg,png格式,不可为gif格式
ServletOutputStream sos = response.getOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(sos);
encoder.encode(image);
bis.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
web.xml文件配置
index.jsp
ShowImgAction
com.test.action.img.ShowImgAction
ShowImgAction
/showImg
jsp显示图片
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
显示数据库的图片
图片:
java图片保存文件到数据库_java保存图片内容到数据库相关推荐
- java图片和视频上传_Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能(转)...
视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器. 多媒体视频处理工具FFmpe ...
- word文档保存文件时出错_保存时如何自动创建Word文档的备份副本
word文档保存文件时出错 Backing up your documents is always a good thing to do, but not always something we re ...
- java获取excel文件第一行_java - 在Java中读取Excel文件,但第一行除外 - 堆栈内存溢出...
我正在尝试从使用xlsx文件的JasperReport模板自动创建报告,我用来从excel文件读取的方法是这样的: String[] columnNames = new String[]{" ...
- 超过20G的文件怎么保存_金山文档怎么保存文件-金山文档保存文件的方法
金山文档是一款功能十分强大的文档创作软件,该软件界面简单直观,可以实时协作编辑,支持Word.PDF.Excel等格式的文件编辑,是一款十分好用的电脑办公软件.无论使用什么办公软件编辑文档,一般情况下 ...
- java图片和视频上传_java实现上传和读取图片(视频)
0 背景 实现从前端上传图片(或视频),后端保存在指定目录下:再从前端读取文件,进行显示. 1 上传代码实现 1.1 html 1.2 ts // 上传附件 handleChange(info: { ...
- java高效复制文件并移动_Java 7:复制和移动文件和目录
java高效复制文件并移动 这篇文章是我对Java 7 java.nio.file软件包的系列文章的继续,这次涵盖了文件的复制和移动以及完整的目录树. 如果您曾经对Java缺少copy和move方法感 ...
- java 上传文件到服务器_java上传文件到OSS云服务器(二)
上篇文章中已经把接口端和service业务层写了,这次就把OSS上传文件的工具类补上. 一.首先配置好OSS服务器各项节点,这是在springboot中appliaction.yml配置文件中的写法. ...
- java 调用 swf 文件上传_java SpringMvc 实现文件在线预览(openoffice+swftools+flexpaper)
项目需求:服务器接受的文件当下只能下载之后才能浏览内容,现需要后台能在线浏览到文件内容,避免繁琐无用文件下载操作. 通过几天网上资料搜索,目前免费的在线预览开发技术使用最多还是(openoffice+ ...
- java中打开文件怎么实现_Java如何在程序中打开文件?
有时需要在java程序中打开一个文件.java.awt.Desktop可用于在java中打开文件.Desktop实现依赖于平台,因此首先,应该检查操作系统是否支持Desktop类.此类查找注册到当前平 ...
- java 判断一个文件是否存在_java判断某个文件是否存在的方法
java判断某个文件是否存在的方法 发布时间:2020-06-25 17:09:42 来源:亿速云 阅读:119 作者:Leah 这篇文章运用简单易懂的例子给大家介绍java判断某个文件是否存在的方法 ...
最新文章
- excel公式不自动计算_c++通用面积计算公式_excel 公式计算 c++
- 【opencv】边缘高斯模糊(canny+dilate+GaussianBlur)Python实现
- RabbitMQ指南(中)
- 基于HMM的中文分词
- python模拟ajax请求_短信炸弹—用Python模拟ajax请求
- 转为字符数组_数组的20种常用的方法?
- Qt5制作icon图标文件和发布程序简易介绍
- 插入排序 - python实现
- WPF 媒体播放器(MediaElement)使用实例(转)
- 云免等候服务器响应,云服务器响应
- 马尔科夫决策过程(MDP) : BlackJack (MC-Off Policy)
- Android n multi-window多窗口支持
- 单片机原理与应用技术(一)———51单片机延时汇编语言
- 第十届泰迪杯数据挖掘B题电力系统负荷预测分析
- CSS命名规范 BEM 颜色 【全局】
- QT 多线程异步获取htpp信息 网络通信
- notepad++下载安装步骤
- H3C服务器web怎么修改密码,h3c路由器怎么修改密码_h3c路由器找回密码
- 未越狱设备 安装ipa
- shiro基本使用和完成登录