1. 程式人生 > >9 文件上傳和下載

9 文件上傳和下載

參數 threshold msi 臨時 iso common out cto chm

1.文件上傳

      1.修改表單的enctype: <form action="" method="post"         enctype="multipart/form-data">
   修改後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<FileItem> 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);

9 文件上傳和下載