1.
@RequestMapping("/doSaveBill.htm") public void uploadFile(Integer loginId,HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException { int num = 0; // 设置request编码,主要是为了处理普通输入框中的中文问题 request.setCharacterEncoding("UTF-8"); System.out.println("解析工作马上开始......................."); // 这里对request进行封装,RequestContext提供了对request多个访问方法 org.apache.commons.fileupload.RequestContext requestContext = new ServletRequestContext(request); // 判断表单是否是Multipart类型的。这里可以直接对request进行判断,不过已经以前的用法了 if (FileUpload.isMultipartContent(requestContext)) { num++; DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置文件的缓存路径 factory.setRepository(new File("D:/tmp")); File dir = new File("d:\\download"); if (!dir.exists()) { dir.mkdirs(); } // System.out.print("已经生成临时文件"); try { response.getWriter().write("200"); } catch (IOException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } ServletFileUpload upload = new ServletFileUpload(factory); // 设置上传文件大小的上限,-1表示无上限 upload.setSizeMax(100000 * 1024 * 1024); List items = new ArrayList(); try { // 上传文件,并解析出所有的表单字段,包括普通字段和文件字段 items = upload.parseRequest(request); } catch (FileUploadException e1) { System.out.println("文件上传发生错误" + e1.getMessage()); } // 下面对每个字段进行处理,分普通字段和文件字段 Iterator it = items.iterator(); while (it.hasNext()) { DiskFileItem fileItem = (DiskFileItem) it.next(); // 如果是普通字段 if (fileItem.isFormField()) {// System.out.println(fileItem.getFieldName()// + " "// + fileItem.getName()// + " "// + new String(fileItem.getString().getBytes("iso8859-1"), "gbk")); } else { System.out.println(fileItem.getFieldName() + " " + fileItem.getName() + " " + fileItem.isInMemory() + " " + fileItem.getContentType() + " " + fileItem.getSize()); // 保存文件,其实就是把缓存里的数据写到目标路径下 if (fileItem.getName() != null && fileItem.getSize() != 0) { File fullFile = new File(fileItem.getName()); File newFile = new File("d:/download/"+num //拼上num,防止文件名重复 + fullFile.getName()); try { fileItem.write(newFile); // 设置响应码 response.setStatus(200); } catch (Exception e) { e.printStackTrace(); } } else { System.out.println("文件没有选择 或 文件内容为空"); } } } //上传完毕后手动删除缓存的 文件 File file = new File("D:/tmp"); if (file.exists()) { File[] listFiles = file.listFiles(); for (File deleteFile : listFiles) { deleteFile.delete(); } } } }
2.使用spring文件解析器
@RequestMapping("/doSaveBill2.htm") public void upload(Integer loginId,HttpServletRequest req,HttpServletResponse resp){ Mapresult = new HashMap (); File localFile = null; //创建通用的多部分解析器 CommonsMultipartResolver cmr = new CommonsMultipartResolver(req.getSession().getServletContext()); //判断是否有文件在request中,即多部分请求 if(cmr.isMultipart(req)){ //转换成多部分request MultipartHttpServletRequest msr = (MultipartHttpServletRequest)req; //取得request中所有的文件名 Iterator iter = msr.getFileNames(); while(iter.hasNext()){ //记录上传过程起始时的时间,用来计算上传时间 long pre = System.currentTimeMillis(); //取得上传的文件 MultipartFile file = msr.getFile(iter.next()); if(file != null){ //取得当前上传文件的文件名 String fileName = file.getOriginalFilename(); //如果文件名不为"",说明该文件存在,否则说明该文件不存在 if(!"".equals(fileName.trim())){ //重命名上传后的文件名 String newFileName = ""+System.currentTimeMillis()+fileName; //定义上传路径 String path = "D:/download" + newFileName; localFile = new File(path); try { file.transferTo(localFile); } catch (Exception e) { LOGGER.error("文件上传出错"); } }else{ result.put("code", "2"); result.put("msg", "文件不存在!"); } } } } if(!"2".equals(result.get("code"))){//成功返回200 result.put("code", "200"); result.put("msg", "文件上传成功"); } }