文件上传
public class upLoadServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //判断上传的文件普通表单还是带文件的表单 if (!ServletFileUpload.isMultipartContent(req)) { return;//终止方法运行,说明这是一个普通的表单,直接返回 } String message = null; try { //创建上传文件的保存路径,建议在WEB-INF下,安全,用户无法直接访问上传的文件 String uploadPath = this.getServletContext().getRealPath("/WEB-INF/upload"); File uploadFile = new File(uploadPath); //若地址不存在就创建 if (!uploadFile.exists()) { uploadFile.mkdir();//创建这个目录 } //使用缓存,当文件过大时,先存为临时文件 String tempPath = this.getServletContext().getRealPath("/WEB-INF/temp"); File tempFile = new File(tempPath); if (!tempFile.exists()) { tempFile.mkdir(); } //先创建DiskFileItemFactory对象;=======================================>>> DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory(); //设置缓存区大小 diskFileItemFactory.setSizeThreshold(1024 * 1024); //临时文件保存目录 diskFileItemFactory.setRepository(tempFile); //获取ServletFileUpload对象============================================>>> //作用是处理上传文件数据,将表单的每一项输入封装为Fileltem对象; ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory); //监听文件上传进度; servletFileUpload.setProgressListener(new ProgressListener() { @Override public void update(long l, long l1, int i) { DecimalFormat df = new DecimalFormat("0%"); System.out.println("文件总大小==》" + l1 + "已经上传 " + df.format( (((Long) l).intValue()/ ((Long) l1).doubleValue()))); } }); //处理文件乱码 servletFileUpload.setHeaderEncoding("utf-8"); //设置单个文件最大值3M servletFileUpload.setFileSizeMax(3 * 1024 * 1024); //设置总大小 servletFileUpload.setSizeMax(100 * 1024 * 1024); //处理上传的文件;============================================>>> //前端请求解析; 封装为fileItem对象 List<FileItem> fileItems = servletFileUpload.parseRequest(req); for (FileItem fileItem : fileItems) { //判断是输入框还是上传文件的; //注意这个方法: 当返回 false 时才是文件类型的; if (fileItem.isFormField()) { //获取其他标签框的name; String name = fileItem.getName(); //处理乱码问题;(统一编码) String value = fileItem.getString("utf-8"); System.out.println(name + "<---->" + value); } else { // 获取文件名 String uploadName = fileItem.getName(); System.out.println("注意上传的文件名"); if (uploadName == null || uploadName.trim().equals("")) { continue; } //输入文件的名字;与后缀名; String realName = uploadName.substring(uploadName.lastIndexOf("/" )+ 1); String nameSuffx = uploadName.substring(uploadName.lastIndexOf("." )+ 1); System.out.println("实际文件名==>" + realName + "后缀文件类型=>" + nameSuffx); String uploadFileId = UUID.randomUUID().toString(); //文件的存放地址问题============================================>>> //文件真实地址加上uuid的通用码; String realPath = uploadPath + "/" + uploadFileId; File realFile = new File(realPath); if (!realFile.exists()) { //创建目录; realFile.mkdir(); } //文件传输==>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>流的方式; InputStream inputStream = fileItem.getInputStream(); FileOutputStream out = new FileOutputStream(realPath + "/" + realName); //创建传输的缓冲区; byte[] arr = new byte[1024]; int len = 0; while ((len = inputStream.read(arr)) > 0) { out.write(arr, 0, len); } out.close(); inputStream.close(); message = "上传成功"; } } } catch (FileUploadException e) { message = "上传失败"; e.printStackTrace(); } req.setAttribute("message", message); req.getRequestDispatcher("result.jsp").forward(req, resp); } }