jsp+servlet+Mysql 存储图片路径到数据库

您所在的位置:网站首页 jsp接收servlet数据写在哪个地方 jsp+servlet+Mysql 存储图片路径到数据库

jsp+servlet+Mysql 存储图片路径到数据库

2023-07-19 01:06| 来源: 网络整理| 查看: 265

实现思路:

存:在进行上传图片时,为了防止图片名重复先使用时间戳对图片名进行重命名,然后再把图片放在Web项目路径下,最后把图片的路径存放在数据库中。 取:从数据库中取出相应的图片路径,回显到前端页面

工具: IDEAMysqlfileUpload 实现步骤 1:导入依赖jar包 commons-fileUpload.jarcommons-io.jar

使用fileUpload组件首先需要引入的·两个jar包

2:数据库操作准备 创建用户表 -- 创建用户表 CREATE TABLE blogger( blogger_id INT PRIMARY KEY auto_increment, name_id VARCHAR(50) NOT NULL UNIQUE, nick_name VARCHAR(50) NOT NULL UNIQUE, gender TINYINT, header_por VARCHAR(80) )

存储图片的字段(header_por)类型是字符型,用来存储图片路径

用户表实体映射 Blogger.java public class Blogger { private int blogger_id; private String name_id; private String nick_name; private Integer gender; private String header_por; private String email; private String brief_intro; private String pass; private int state; private String active_code; private Integer expire_time; public int getBlogger_id() { return blogger_id; } public void setBlogger_id(int blogger_id) { this.blogger_id = blogger_id; } public String getName_id() { return name_id; } public void setName_id(String name_id) { this.name_id = name_id; } public String getNick_name() { return nick_name; } public void setNick_name(String nick_name) { this.nick_name = nick_name; } public Integer getGender() { return gender; } public void setGender(Integer gender) { this.gender = gender; } public String getHeader_por() { return header_por; } public void setHeader_por(String header_por) { this.header_por = header_por; } } } Dao层操作数据库存贮图片路径 bloggerDao.java public class BloggerDao { JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); // 修改头像 public int updateHead(int id,String headUrl) { String sql = "update blogger set header_por = ? where blogger_id = ?"; int n = template.update(sql,headUrl,id); return n; } } 3:servlet编写 @WebServlet("/uploadImageServlet") public class UploadImageServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); Object file = request.getParameter("file"); Blogger blogger = (Blogger) session.getAttribute("blogger");//获取到登录时存入session里的用户对象 String headUrl = ""; //存放头像图片路径 String headImgFileName = "headImage"; //Web项目中存放图片的文件夹名。可自定义 // 判断上传表单是否为multipart/form-data类型 if (ServletFileUpload.isMultipartContent(request)) { try { // 1. 创建DiskFileItemFactory对象,设置缓冲区大小和临时文件目录 DiskFileItemFactory factory = new DiskFileItemFactory(); // System.out.println(System.getProperty("java.io.tmpdir"));//默认临时文件夹 // 2. 创建ServletFileUpload对象,并设置上传文件的大小限制。 ServletFileUpload sfu = new ServletFileUpload(factory); sfu.setSizeMax(10 * 1024 * 1024);// 以byte为单位 不能超过10M 1024byte = // 1kb 1024kb=1M 1024M = 1G sfu.setHeaderEncoding("utf-8"); // 3.调用ServletFileUpload.parseRequest方法解析request对象,得到一个保存了所有上传内容的List对象。 @SuppressWarnings("unchecked") List fileItemList = sfu.parseRequest(request); Iterator fileItems = fileItemList.iterator(); // 4. 遍历list,每迭代一个FileItem对象,调用其isFormField方法判断是否是上传文件 while (fileItems.hasNext()) { FileItem fileItem = fileItems.next(); // 普通表单元素 if (fileItem.isFormField()) { String name = fileItem.getFieldName();// name属性值 String value = fileItem.getString("utf-8");// name对应的value值 System.out.println(name + " = " + value); } // 的上传文件的元素 else { String fileName = fileItem.getName();// 上传的文件名称 System.out.println("原文件名:" + fileName);// Monkey.jpg String suffix = fileName.substring(fileName.lastIndexOf('.'));//获取文件扩展名 System.out.println("扩展名:" + suffix);// .jpg // 新文件名(唯一) String newFileName = new Date().getTime() + suffix; System.out.println("新文件名:" + newFileName);// 1478509873038.jpg // 5. 调用FileItem的write()方法,写入文件 //文件存储位置 ServletContext context = this.getServletContext(); // 获取绝对路径 String serverPath = context.getRealPath("")+headImgFileName;// System.out.println(serverPath); // 如果存放头像的文件夹不存在则创建 File headFile = new File(serverPath); if (!headFile.exists()) { headFile.mkdirs(); } //将图片存入文件夹 File headImage = new File(serverPath,newFileName); // 将上传的文件写到服务器上指定的文件。 fileItem.write(headImage); // 6. 调用FileItem的delete()方法,删除临时文件 fileItem.delete(); //7:接下来就是把图片路径(headUrl)存储到自己的数据库中去了 headUrl = headImgFileName+"/"+newFileName; // 拼接相对路径 headImage/1478509873038.jpg System.out.println(headUrl); // 自己的把图片路径存储到数据库中的操作,,,,,, BloggerDao bloggerDao = new BloggerDao(); if(bloggerDao.updateHead(blogger.getBlogger_id(),headUrl) > 0) { System.out.println("修改头像图片地址成功"); //存储成功后,把路径存到session里面,重定向到提交图片的界面,进行回显 session.setAttribute("headUrl",headUrl); response.sendRedirect(" ../jsp/blogger.jsp"); } else { System.out.println("头像路径更改失败"); } } } } catch (FileUploadException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } else { System.out.println("请求格式错误"); } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request,response); }

注意:上面代码最后有一个存储图片路径到数据库的操作,需要自己编写,就是简单地数据库操作,相信大家肯定都会

4:jsp编写

blogger.jsp

// ../${blogger.header_por}是数据回显,当数据库存储之后,把上传的图片路径存储在session里,前端直接获取session里路径的值,显示图片。这里是相对路径,大家需要根据先jsp文件所在的位置与Web项目下存储图片的位置编写自己的相对路径

注意:

普通表单提交默认enctype=“application/x-www-form-urlencoded”;但是当表单中存在文件类型时,需要设置enctype=“multipart/form-data”,它不对字符进行编码,用于发送二进制的文件(即所有文件类型,如视频、图片、音乐、文档都可以用此类型entype);还有一种enctype="text/plain"用于发送纯文本内容。表单请求方式必须为post。接收时不能再用request.getParameter(),而是request.getInputStream()解析二进制流,得到ServletInputStream对象。 大功告成

这样就可以完成了jsp+servlet+Mysql 在数据库中的存取操作了

如果大家想了解学习更多有关FileUpload的知识,可以看看这篇博客: java web文件上传——FileUpload

参考文章链接

https://www.jb51.net/article/107000.html https://blog.csdn.net/linghuainian/article/details/82253247



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3