该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

【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相关推荐

  1. java中怎么合成图片_Java 实现图片合成

    图片合成 利用Java的绘图方法,实现图片合成 在开始之前,先定一个小目标,我们希望通过图片合成的方式,创建一个类似下面样式的图片 I. 设计思路 首先解析一下我们的目标实现图片合成,那么这些合成的基 ...

  2. java用mysql存储图片_Java存储图片到Mysql

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 [1]视图层 action="${ctx}/web/UserInforServlet?method=userInforServlet" ...

  3. java中如何切割图片_Java 切割图片代码

    Java 切割图片代码 (2012-09-04 10:39:48) 标签: 宽度 切割 源文件 工具类 java package com.lyis.commons.util; import java. ...

  4. java 字符串转成图片_java 转换图片为字符串,将字符串转换成图片显示

    java 转换图片为字符串,将字符串转换成图片显示, 该方法只适用于比较小的图片传输,50K以内: try{ // 将图片转换成字符串 File imgFile = new File("f: ...

  5. java 旋转图片_Java实现图片翻转以及任意角度旋转

    最近几天在做一个项目,因为涉及到了图片(绝大部分都不是整图,是把一张张的大图切成小图,也就是Title)的翻转以及90°旋转,弄得焦头烂额.在网上搜索好几天,发现用到的方法都是比较公式化的,对于只是在 ...

  6. java exif 语言编码_Java读取图片EXIF信息的代码

    Java读取图片EXIF信息的代码 本文实例讲述了Java读取图片EXIF信息的方法.分享给大家供大家参考.具体分析如下: 首先介绍一下什么是EXIF,EXIF是Exchangeable Image ...

  7. java base64字符 转图片_JAVA实现图片与base64字符串之间的转换详解

    import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import ...

  8. java 实现ps功能_java 简单图片,可以实现ps的几个小滤镜

    java 简单图片,可以实现ps的几个小滤镜 以下教你实现图片马赛克,黑白画,珠纹化,油画效果等处理技术原理及实现.看完自己也可以简单的玩一玩. 1. 需要用到的包 java.awt // 用于创建用 ...

  9. java裁剪图片_java实现图片的缩放和裁剪

    最近要做一个web项目,里面涉及到对图片的缩放和裁剪.原理是这样的,首先先对图片进行缩放,然后,将缩放之后的图片进行裁剪,里面涉及到许多java图片api的应用,代码如下. //参数分别对应了员图片的 ...

  10. java文字水印换行_Java实现图片水印文字换行、平铺、旋转效果-Go语言中文社区...

    import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Image; impo ...

最新文章

  1. 共抗疫情,飞书助力学校、企业等组织机构高效远程协作
  2. thrift的中文编码处理
  3. os.listdir的文件顺序与目录下文件顺序不一样
  4. python 30分钟_一张图30分钟快速Python入门
  5. 图文详解Java环境变量配置方法
  6. kylin 部分问题
  7. ES读写为何速度那么快(史上最全面总结)
  8. 前端-requests-flask对应关系 restful
  9. Vue 学习笔记(4)Vue-cli4 项目搭建 + 目录结构 + 项目打包、部署
  10. 吴恩达课程及视频笔记汇总
  11. arduino编码器计数_【Arduino】旋转编码器的Arduino使用方法
  12. 基于SSH的宠物管理系统(宠物商店)
  13. python做算法题优势_算法优点和缺点汇总(推荐AAA)
  14. Windows 技巧集
  15. 利用H5SVG实现线性动画效果
  16. Maya v1.0.7.0 类似Rolan简洁小巧简单易用的快速启动工具
  17. win7计算机亮度怎么调节,win7系统屏幕亮度怎么修改调整
  18. 腾讯云TCA开发工程师认证考试
  19. 预测二手车的交易价格
  20. javascript显示本地服务器图片,JavaScript图片本地预览功能的实现方法

热门文章

  1. h5跳转小程序页面url_小程序和h5跳转
  2. 力扣-797. 所有可能的路径
  3. HTML5——锚点链接
  4. rk3399_android7.1查看当前的ddr频率
  5. Spring.net 中的AOP功能
  6. MySQL优化(二)
  7. 线程同步与互斥........
  8. Netty(3)Time protocol
  9. Ajax关于readyState和status的讨论
  10. 1016: [JSOI2008]最小生成树计数 - BZOJ