java用mysql存储图片_Java存储图片到Mysql
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
【1】视图层
action="${ctx}/web/UserInforServlet?method=userInforServlet" >
更换头像
立即提交
重置
var layer,upload,form;
//1-页面数据加载
$(function () {
//【1】加载&初始化layui模块-弹出层与table数据表格
layui.use(["layer", "upload","form"], function () {
layer = layui.layer;
laydate=layui.laydate;
upload = layui.upload;//layui的上传
form= layui.form;
uploadImage();
});
});
function uploadImage(){
var $ = layui.jquery;
upload.render({
elem: "#upImage"
,auto: false
,size:1024
,choose: function(obj){//使用choose选择文件后的回调函数
//预读本地文件示例,不支持ie8
obj.preview(function(index, file, result){
$("#userImge").attr("src",result); //图片链接(base64)
});
}
});
}
//提交form表单
$("#saveUserInfor").click(function(){
$("#frregister").ajaxSubmit(function(data) {
if(data="1"){
layer.msg("成功!");
}
});
});
【2】控制器
publicvoid userInforServlet(HttpServletRequest request,HttpServletResponseresponse) throws IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=UTF-8");//处理响应编码
Map map=new HashMap();
UserDetail userDetail=new UserDetail();
try {
//【1】解析数据
DiskFileItemFactory fac=new DiskFileItemFactory();
int sizeThreshold=1024*1024*10; //10MB
fac.setSizeThreshold(sizeThreshold);
fac.setRepository(new File(System.getProperty("java.io.tmpdir")));
ServletFileUpload upload=new ServletFileUpload(fac);//文件上传解析器
upload.setHeaderEncoding("utf-8");
Listlist=upload.parseRequest(request);
//【2】遍历集合
for(FileItem item :list){
//1)如果当前FileItem对象是普通项
if(item.isFormField()){
map.put(item.getFieldName(),item.getString());
}else{
//1)如果当前FileItem对象是上传项
//2)判断是否存在有该文件夹
String realPath=("D:/Mytouimage");
File uploadMkdir=new File(realPath);
if(!uploadMkdir.exists()){
uploadMkdir.mkdir();
}
//如果fileitem中封装的是上传文件,得到上传的文件名称,
String fileName = item.getName();//上传文件的名
//多个文件上传时,没有上传内容的问题异常处理
if(fileName==null||"".equals(fileName.trim())){ continue;
}
fileName =fileName.substring(fileName.lastIndexOf("\\")+1);
InputStream is=item.getInputStream();
File file=new File(realPath+"/"+fileName);
//3)先在本地存储图片,再读取保存到数据库
if(!file.isDirectory()){
userDetail.setImageName(realPath+"/"+item.getName());
OutputStream os=new FileOutputStream(file);
//IOUtils拷贝流
IOUtils.copy(is,os);
//关闭资源
IOUtils.closeQuietly(is);
IOUtils.closeQuietly(os);
item.delete();//删除处理文件上传时生成的临时文件
}
}
}
BeanUtils.populate(userDetail,map);
int flag =ids.insert(userDetail);
if(flag==1){
response.getWriter().write("1");
response.getWriter().close();
}
}
【3】dao层
@Override
publicint insert(UserDetail t) {
int flag=0;
InputStream fis=null;
String insert="INSERT INTOr_userdetail(userImage,imageName)" +
"VALUES(?,?);";
try {
con=JDBCUtil.getConnection();
ps=con.prepareStatement(insert);
if(t.getImageName()!=null){
//读取本地图片
fis=new FileInputStream(t.getImageName());
}
//将流写入Mysql
ps.setBinaryStream(1, fis, fis.available());
ps.setString(2, t.getImageName());
flag=ps.executeUpdate();
} catch (SQLException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
catch (FileNotFoundException e){
//TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
return flag;
}
【4】po层
publicclass UserDetail implements Serializable{
publicstaticfinallongserialVersionUID = 42L;
privateintuserDetailID;
private Blob userImage;
private String imageName;
public Blob getUserImage() {
returnuserImage;
}
publicvoid setUserImage(Blob userImage) {
this.userImage = userImage;
}
public String getImageName() {
returnimageName;
}
publicvoid setImageName(String imageName) {
this.imageName = imageName;
}
}
【5】总结
1)注意上传图片是form表单一定要加method="post" enctype="multipart/form-data" ,否则无法将数据上传到服务器。
2)Mysql存储图片的数据类型
TinyBlob最大 255
Blob 最大 65K
MediumBlob 最大 16M
LongBlob 最大 4G
3)在dao层向数据库添加数据
使用ps.setBinaryStream(1,fis, fis.available());
【6】显示图片
publicvoid selectUserImage(HttpServletRequest request, HttpServletResponseresponse) {
String id=request.getParameter("userID");
if(id!=null){
int userID=Integer.parseInt(id);
UserDetail userDetail=ids.findByUserid(userID);
BufferedOutputStream bufos=null;
BufferedInputStream bufis=null;;
try {
if(userDetail.getUserImage()!=null){
//读取缓冲区 userDetail.getUserImage().getBinaryStream()--读取源
bufis=new BufferedInputStream(userDetail.getUserImage().getBinaryStream());
//输出缓冲区 response.getOutputStream()--输出目的
bufos = new BufferedOutputStream(response.getOutputStream());
byte[] bt=newbyte[1024];
//【6】初始化实际长度的数组的长度
int count=0;
//【7】循环读取多媒体文件数据,将其读取的数据存储在byte数组
while((count=bufis.read(bt))!=-1){
//【8】截取数组从零到实际长度,循环写入多媒体的目标文件
bufos.write(bt,0,count);
}
}
bufis.close();
bufos.close();
} catch (SQLException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
java用mysql存储图片_Java存储图片到Mysql相关推荐
- java中怎么合成图片_Java 实现图片合成
图片合成 利用Java的绘图方法,实现图片合成 在开始之前,先定一个小目标,我们希望通过图片合成的方式,创建一个类似下面样式的图片 I. 设计思路 首先解析一下我们的目标实现图片合成,那么这些合成的基 ...
- java mysql教程基于_java基于jdbc连接mysql数据库功能实例详解
本文实例讲述了java基于jdbc连接mysql数据库的方法.分享给大家供大家参考,具体如下: 一.JDBC简介 Java 数据库连接,(Java Database Connectivity,简称JD ...
- java中如何切割图片_Java 切割图片代码
Java 切割图片代码 (2012-09-04 10:39:48) 标签: 宽度 切割 源文件 工具类 java package com.lyis.commons.util; import java. ...
- java 跨域上传_java后台图片跨域上传图片 文件
发送方 @ResponseBody @RequestMapping(value="/imgUpLoadNewOneKuaYu")public String imgUpLoadNew ...
- java 字符串转成图片_java 转换图片为字符串,将字符串转换成图片显示
java 转换图片为字符串,将字符串转换成图片显示, 该方法只适用于比较小的图片传输,50K以内: try{ // 将图片转换成字符串 File imgFile = new File("f: ...
- java 旋转图片_Java实现图片翻转以及任意角度旋转
最近几天在做一个项目,因为涉及到了图片(绝大部分都不是整图,是把一张张的大图切成小图,也就是Title)的翻转以及90°旋转,弄得焦头烂额.在网上搜索好几天,发现用到的方法都是比较公式化的,对于只是在 ...
- java base64字符 转图片_JAVA实现图片与base64字符串之间的转换详解
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import ...
- java裁剪图片_java实现图片的缩放和裁剪
最近要做一个web项目,里面涉及到对图片的缩放和裁剪.原理是这样的,首先先对图片进行缩放,然后,将缩放之后的图片进行裁剪,里面涉及到许多java图片api的应用,代码如下. //参数分别对应了员图片的 ...
- java 保存gif图片_java gif图片保存处理逻辑
java gif图片保存处理逻辑 /** * 保存本地上传的gif * @param inputStream 图片数据 * @param savePath 保存路径 */ public static ...
最新文章
- 应用随机过程张波商豪_Markov链的应用一:MCMC算法
- command line
- html5录像功能限制时间,HTML5拍照和摄像机功能实战详解
- ffmpeg h265编码_基于ffmpeg库mp4编码记录。
- 使用JS实现将GridView中的TextBox列的值博给GridView外的一个文本筐
- linux 自启动脚本顺序,(linux开机启动脚本的顺序.doc
- 用友CDM系统“货位间商品移库单(一步)”表体增加“货位可用数量”字段,根据表头的选择的货位自动带出数值...
- 【数据结构笔记】哈夫曼树的构造算法
- Wireshark使用指南
- 【STM32知识点】STM32基础知识总结
- 门面担当——外观模式
- 【标题】视频标注软件DARKLABEL V2.4 主页中英对照图
- Par.ici法语听写练习A1 -L13
- 基于opencv-python的人脸识别、眼睛识别和微笑识别
- 第七章、Groovy面向对象
- tinymce富文本编辑框使用
- 食物链(Food Chain POJ 1182)
- python中计算区间内的质子数
- 马斯京根法matlab程序,(一)马斯京根流量演算法
- Kali系统IP地址配置及SSH开启
热门文章
- 福建省高等学校非计算机考试大纲,福建省高等学校计算机应用水平等级考试三级(偏软)考试大纲...
- Python、C++ lambda 表达式
- mysql 查询倒数第二条记录_MySQL查询倒数第二条记录实现方法
- js遍历json数组给html td赋值,JS实现给json数组动态赋值的方法示例
- python union函数_如何掌握Python union()方法及怎么用?
- Shell脚本——入门
- 问题 B: 调整表中元素顺序(线性表)
- python操作三大主流数据库(12)python操作redis的api框架redis-py简单使用
- AI工程师职业规划和学习路线完整版
- Crawler - 如何爬取列表后进行文章的爬取