1.文件上传

      1.修改表单的enctype: 
修改后servlet就不能通过req.getParameter("参数名")接受请求参数了 2.导入jar包: commons-fileupload-1.2.2.jar commons-io-1.4.jar 3.检查method和contentType boolean isMultipart=ServletFileUpload.isMultipartContent(req); if(!isMultipart){ return; } 4.创建处理FileItem的工厂对象 FileItemFactory factory=new DiskFileItemFactory(); 创建处理文件上传的处理器对象 ServletFileUpload upload=new ServletFileUpload(factory); 解析请求对象 List items=upload.parseRequest(req); for(FileItem fileItem:items){ String fieldName=fileItem.getFiledName(); if(fileItem.isFormField()){ String fileName=fileItem.getString("utf-8"); }else{ String fileName=fileItem.getName(); String contentType=fileItem.getContentType(); String realPath=super.getServltContext().getRealPath("/upload"); fileItem.write(new File(realPath+"/"+fileName)); } } 5.文件名处理 使用UUID当做文件名称 String uuid=UUID.randomUUID().toString(); String extension=FilenameUtils.getExtension(fileName); fileName=uuid+"."extension; 6.缓存大小和临时目录 设置缓存大小: factory.setSizeThreshold(500*1024); 设置临时目录: factory.setRepository(new File(""));

2.使用注解上传文件

  @MultipartConfig
     可以通过req.getParamter()接受参数
 接受上传文件
  Part part=req.getPart("");
  part.write(realPath+"/"+name);

3.文件下载

  接受请求参数:
      String fileName=req.getParameter("fileName");
  fileName=new String(fileName.getBytes("ISO-8859-1"),"utf-8");
 找到资源的位置,读取到内存,响应给浏览器:
      String realPath=super.getServletContext().getRealPath("");
  String filePath=realPath+"\\"+fileName;

  ServletOutputStream out=resp.getOutputStream();
  //设置响应头
   resp.setContenType("application/x-msdownload");
 //获取请求头信息Use-Agent
     String userAgent=req.getHeader("User-Agent");
 if(userAgent.contain("MSIE")){
    //IE
    fileName=URLEncoder.encode(fileName,"utf-8");
 }else{
 //W3C
    fileName=new String(fileName.getBytes("utf-8"),"ISO-8859-1");
 }
 //设置下载的文件名称
 resp.setHeader("Content-Disposition","attachment;fileName="+fileName);
 //将数据响应到浏览器
 Files.copy(Paths.get(filePath),out);