表单提交与头像上传
Web后台管理系统中数据的添加、删除、修改操作是必不可少的,一般是针对数据库表记录的增删改,如果操作数据包含头像图片,就需要涉及文件上传操作。
一、文件上传实现方式
1.自己解析实现
用到知识:
1.http协议
当向服务器发送一次请求时,其实质为向服务器发送一个文本数据,这个文本数据是按http请求格式进行组装,格式如下图:
2. io流
按照http协议格式读取文本数据,上传有头像图片,进行写文件操作.
2.smartupload上传库实现
SmartUpload su = new SmartUpload(); su.initialize(getServletConfig(), req, resp);// 初始化对象 su.upload();// 上传文件 su.save(file) //保存文件
3.commons-fileupload上传库实现
首先:下载commons-fileupload-1.3.2.jar和commons-io-2.4.jar
地址:http://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi
commons-fileupload核心类介绍:
1.创建一个文件项目工厂类DiskFileItemFactory。
DiskFileItemFactory有俩个构造方法: DiskFileItemFactory() 其中sizeThreshold是默认值10kB, 文件大小不超过这个值将内容保存在内存,超过这个值会把文件保存到临时目录下,可用System.getProperty("java.io.tmpdir")获取; DiskFileItemFactory(int sizeThreshold, File repository) 可以指定sizeThreshold, 和文件保存到磁盘的路径。
2.创建一个文件处理类ServletFileUpload。
ServletFileUpload解析上传请求request的信息,封装到FileItem类中,我们通过FileItem可以获取文件的名称、大小、文件流等信息。
ServletFileUpload sfu = new ServletFileUpload(factory); ServletFileUpload可以设置: headerEncoding 读取请求头信息时使用的编码 sizeMax 单次请求所能上传的文件总大小的最大size,默认是-1,不限制大小 fileSizeMax 单次请求所能上传的单个文件最大size,默认是-1,不限制大小 6List<FileItem> items = sfu.parseRequest(req);
二、学生头像上传实例
1.添加学生
addstudent.jsp
<div class="login-form"> <form action="./addStudentservlet.do" method="post" enctype="multipart/form-data"> <input type="text" name="userName" placeholder="请输入学生姓名"> <input type="text" name="number" placeholder="请输入学生学号"><br><br> 头像 :<input type="file" name="headerImg"/> <input type="submit" value="添加"> </form> </div>
addStudentservlet.do
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 定义一个HashMap,存放请求参数 HashMap<String, String> parameterMap = new HashMap<String, String>(); // -----上传头像并保存参数到hashMap----- uploadHeader(request, parameterMap); addStudent(parameterMap,request,response); }
/** * 上传修改后头像并保存表单数据到hashmap * * @param request * @throws UnsupportedEncodingException */ public void uploadHeader(HttpServletRequest request, HashMap<String, String> parameterMap) throws UnsupportedEncodingException { ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory()); servletFileUpload.setHeaderEncoding("UTF-8"); List<FileItem> fileItemLists = null; try { fileItemLists = servletFileUpload.parseRequest(request); } catch (FileUploadException e) { e.printStackTrace(); } Iterator<FileItem> iterator = fileItemLists.iterator(); while (iterator.hasNext()) { FileItem fileItem = iterator.next(); // 如果是表单数 if (fileItem.isFormField()) { String filedName = fileItem.getFieldName(); String fileValue = fileItem.getString("UTF-8"); parameterMap.put(filedName, fileValue); } else {// 文件操作 String rootDir = getServletContext().getRealPath("/"); String fileDir = "upload/" + fileItem.getName(); File file = new File(rootDir + fileDir); FileUtil.createFile(file); System.out.println(file); try { fileItem.write(file); } catch (Exception e) { e.printStackTrace(); } parameterMap.put(fileItem.getFieldName(), fileDir); } } }
private void addStudent(HashMap<String,String> parameters,HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ String userName = parameters.get("userName"); String number = parameters.get("number"); int numbers = Integer.parseInt(number); int ages = 23; String fileUrl = parameters.get("header_img"); System.out.println("userName:"+userName+", number :"+number+" ,fileUrl :"+fileUrl); //添加数据库 }
2.修改学生操作:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HashMap<String, String> parameterMap = new HashMap<>(); // -----保存参数到hashMap并上传新头像----- uploadHeader(request, parameterMap); // -----删除原头像----- deleteHeaderImg(parameterMap); // -----修改数据库字段---- updateStudent(parameterMap); response.sendRedirect(request.getContextPath() + "/student_list.jsp"); }
转载请注明来源:表单提交与头像上传