1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
| try { // 创建一个DiskFileItemFactory工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置工厂的缓冲区的大小 factory.setSizeThreshold(1024 * 10);// 设置缓冲区的大小为100KB // 设置上传时生成的临时文件的保存目录 factory.setRepository(tmpFile); // 创建一个文件上传解析器 ServletFileUpload upload = new ServletFileUpload(factory); // 监听文件上传进度 upload.setProgressListener(new ProgressListener() { public void update(long readedBytes, long totalBytes, int currentItem) { // TODO Auto-generated method stub System.out.println("当前已处理:" + readedBytes + "-----------文件大小为:" + totalBytes + "--" + currentItem); } }); // 解决上传文件名的中文乱码问题 upload.setHeaderEncoding("UTF-8"); // 判断提交上来的数据是否是上传表单的数据 if (!ServletFileUpload.isMultipartContent(request)) { return; } // 设置上传单个文件的最大值 upload.setFileSizeMax(1024 * 1024 * 100);// 100M // 设置本次上传的所有文件的总和的最大值 upload.setSizeMax(1024 * 1024 * 500);// 500M List items = upload.parseRequest(request); Iterator itr = items.iterator(); while (itr.hasNext()) { FileItem item = (FileItem) itr.next(); // 普通的输入 if (item.isFormField()) { //String name = item.getFieldName(); //// 解决数据中文乱码问题 //String value = item.getString("UTF-8"); //System.out.println(name + "=" + value); continue; } else // 上传文件 { // 得到上传文件的文件名 String fileName = item.getName(); System.out.println("文件名:" + fileName); if (fileName == null && fileName.trim().length() == 0) { continue; } // 保留文件名部分 fileName = fileName .substring(fileName.lastIndexOf("\\") + 1); System.out.println("文件名部分:" + fileName); // 得到上传文件的扩展名 String fileExt = fileName.substring( fileName.lastIndexOf(".") + 1).toLowerCase(); System.out.println("上传的文件的扩展名是:" + fileExt); // 检查扩展名 if (!Ext_Name.contains(fileExt)) { System.out.println("上传文件扩展名是不允许的扩展名:" + fileExt); message = message + "文件:" + fileName + ",上传文件扩展名是不允许的扩展名:" + fileExt + "<br/>"; break; } // 检查文件大小 if (item.getSize() == 0) { continue; } if (item.getSize() > 1024 * 1024 * 100) { System.out.println("上传文件大小:" + item.getSize()); message = message + "文件:" + fileName + ",上传文件大小超过限制大小:" + upload.getFileSizeMax() + "<br/>"; break; } // 得到存文件的文件名 String saveFileName = fileName; System.out.println("存文件的文件名:" + saveFileName); // 获取上传文件的输入流 InputStream is = item.getInputStream(); // 创建一个文件输出流 FileOutputStream out = new FileOutputStream(savePath + "/" + saveFileName); // 创建一个缓冲区 byte buffer[] = new byte[1024]; // 判断输入流中的数据是否已经读完的标致 int len = 0; while ((len = is.read(buffer)) > 0) { out.write(buffer, 0, len); } // 关闭输出流 out.close(); // 关闭输入流 is.close(); // 删除临时文件 item.delete(); message = message + "文件:" + fileName + ",上传成功<br/>"; } } } catch (FileSizeLimitExceededException e) { message = message + "上传文件大小超过限制<br/>"; e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { request.setAttribute("message", message); request.getRequestDispatcher("/message.jsp").forward(request, response); }
|