자바 웹 servlet 다운로드 및 업로드 기능 을 실현 하 는 방법 에 대한 상세 한 설명

이 사례 는 자바 웹 servlet 이 다운로드 와 업로드 기능 을 실현 하 는 방법 을 설명 한다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
본문 내용:
  • servlet 다운로드 기능 실현
  • servlet 업로드 기능 실현
  • 선발 날짜:2018-07-21
    servlet 다운로드 기능 구현
    실현 절차
    1.먼저 jsp 페이지 를 만 들 고 주로 다운 로드 를 촉발 하 는 데 사용 합 니 다.여 기 는 당신 의 생각 에 따라 할 수 있 습 니 다.물론 servlet 쪽 은 상응 하 게 변경 해 야 합 니 다.간단 한 a 탭 을 사용 해서 터치 합 니 다.
    image
    2.응답 정 보 를 설정 하고 브 라 우 저 에 게 전 달 된 데 이 터 를 다운로드 로 식별 하 라 고 알려 줍 니 다.제출 한 데이터 에 따라 대응 하 는 파일 을 찾 아 스 트림 으로 전환 하여 브 라 우 저 에 게 되 돌려 줍 니 다.
    image
    질문
  • 중국어 파일 이름 을 사용 하 는 것 을 권장 하지 않 지만.그래도 처리 수단 을 줘.
  • 먼저 촉발 조건 을 제시 합 니 다:image
    중국어 파일 이름 은 두 가지 문 제 를 해결 해 야 합 니 다.
    1.브 라 우 저 에서 제출 한 중국어 파일 이름 을 인식 해 야 합 니 다.여 기 는 일반적인 get 과 post 의 중국어 데이터 문제 입 니 다.
    get 방식:String filename=new String(filename.getBytes("iso-8859-1"),"utf-8");[톰 캣 8 필요 없어 요.
    post 방식:request.setCharacterEncoding("utf-8")
    2.브 라 우 저 로 되 돌아 갈 때 브 라 우 저 는 돌아 온 다운로드 파일 이름 을 정확하게 표시 할 수 있 습 니 다.
    처리 방법:
    image
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
        // 1.      
        String filename = request.getParameter("target");
        System.out.println(filename);
        // 2.      
        String path = getServletContext().getRealPath("download/" + filename);
        File file = new File(path);
        if (file.exists()) {
          // 3.      ,            ,             
          //        
          String agent = request.getHeader("User-Agent");
          if (agent.contains("Firefox")) {//   
            BASE64Encoder base64Encoder = new BASE64Encoder();
            filename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
          } else {// ie   
            filename = URLEncoder.encode(filename, "utf-8");
          }
          response.setHeader("Content-Disposition", "attachment; filename=" + filename);
          // 4.     
          FileInputStream fis = new FileInputStream(file);
          OutputStream os = response.getOutputStream();
          // 5.      
          int len = 0;
          byte[] buffer = new byte[1024];
          while ((len = fis.read(buffer)) != -1) {
            os.write(buffer, 0, len);
          }
          os.flush();// flush  ,    
          os.close();
          fis.close();
        } else {
          response.setContentType("text/html;charset=UTF-8");
          response.getWriter().write("     ");
        }
    
      }
    servlet 업로드 기능 구현
    1.업로드 에 사용 할 페이지 를 만 듭 니 다.[여 기 는 하나의 업로드 만 사 용 했 지만 사실은 아래 코드 는 여러 개의 업 로드 를 지원 합 니 다.]
    image
    [사 용 했 을 때enctype="multipart/form-data" , , getParameter ]
    2.패 키 지 를 가 져 옵 니 다.fileupload:comons-fileupload-1.2.1.jar 와 comons-io-1.4.jar 를 사용 할 수 있 습 니 다.[여기 서 io 패 키 지 를 가 져 오 는 것 은 주로 io 흐름 도 킹 에 사 용 됩 니 다.업로드 한 파일 흐름 은 출력 흐름 과 직접 도 킹 합 니 다.가 져 오지 않 으 면 스 트림 의 데 이 터 를 수 동 으로 처리 해 야 합 니 다!]
    3.DiskFileItemFactory 공장 클래스 를 만 듭 니 다.사용:DiskFileItemFactory factory=new DiskFileItemFactory();
    4.resquest:ServletFileUpload upload=new ServletFileUpload(factory)를 분석 하 는 분석 클래스 를 만 듭 니 다.
    5.내용 을 분석 하고 list 를 가 져 오 며 데 이 터 는 list 에 저 장 됩 니 다.Listlist=upload.parseRequest(request);
    현재 정보 패 키 징 방법 은 파일 이 업로드 되 지 않 았 을 때 와 다 르 기 때문에 해석 이 필요 합 니 다.
    image
    6.list[list 의 모든 요 소 는 FileItem 대상 입 니 다.FileItem 대상.isFormField()로 폼 항목 인지 판단 할 수 있 습 니 다(파일 이 업로드 항목 이 라 고 생각 합 니 다).사실 이 라면 일반적인 입력 상자 내용 임 을 설명 합 니 다.입력 상자 에 제출 한 내용 을 저장 하려 면 여기 서 처리 할 수 있 습 니 다.업로드 항목 을 설명 하지 않 습 니 다.여 기 는 흐름 에 따라 조작 할 수 있 습 니 다.]
    어떻게 조작 합 니까?
    일반 표 항목:item.getFieldName()에서 해당 하 는 name 을 가 져 올 수 있 습 니 다.item.getString()은 대응 하 는 값 을 가 져 올 수 있 습 니 다.
    업로드 항목 에 대해 서 는 스 트림 을 조작 해 야 합 니 다:item.getInputStream()은 해당 하 는 데이터 스 트림 을 가 져 올 수 있 습 니 다.
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        DiskFileItemFactory factory=new DiskFileItemFactory();//1.  DiskFileItemFactory   
        ServletFileUpload upload=new ServletFileUpload(factory);//2.     ,    resquest
        try {
          List<FileItem> list = upload.parseRequest(request);//3.    ,    list,      list 
          for(FileItem item:list) {
            if(item.isFormField()) {//            
              System.out.println(item.getFieldName());//       name    
              System.out.println(item.getString());//           
            }else {//  ,      
              //   ,    
              InputStream ism = item.getInputStream();
              String path=getServletContext().getRealPath("/upload/");
              System.out.println(path);
              String filename = item.getName();//  getName       
              System.out.println(filename);
              File file=new File(path+filename);
              file.createNewFile();//                
              OutputStream fos = new FileOutputStream(file);
              //      commons.io  io  ,            
              IOUtils.copy(ism,fos);//             
              IOUtils.closeQuietly(ism);
              IOUtils.closeQuietly(fos);
              
            }
          }
        } catch (FileUploadException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
        
        
      }
    자바 알고리즘 과 관련 된 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.자바 파일 과 디 렉 터 리 작업 기법 집합,자바 데이터 구조 및 알고리즘 튜 토리 얼,자바 조작 DOM 노드 기술 총화자바 캐 시 작업 기법 집합
    본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

    좋은 웹페이지 즐겨찾기