2017-09-08 1 views
1

버튼 클릭시 서비스를 호출하여 데이터베이스를 쿼리하고 csv 파일을 생성 한 다음 다시 사용자에게 반환하고 싶습니다. 이 프로세스는 오래 실행됩니다 (최대 40 초 소요될 수 있음). 사용자 차단을 원하지 않습니다.spring mvc에서 파일 프로세스 업데이트 생성

내 생각은 다음과 같습니다 :

가 사용자의 입력을 받아 서비스에 createReport 요청을 제출 나는 사용자가 보고서 생성의 진행 상황을 압정 수있는, 진행 페이지를 만들 LIK 것이다. 응답을 기다리지 않고 보고서 ID를 다시 사용자에게 반환하십시오. 새 탭이 열려 보고서 생성 상태를 모니터링 할 수 있습니다. 사용자가 보고서 페이지를 확인하여 요청 상태를 확인할 수 있습니다. 요청이 준비되면 브라우저에서 보고서 다운로드가 시작됩니다.

I는 다음과 같이 떨어지게하고 싶은 :

을 수행합니다. 파일을 저장하고 파일 ID를 리턴하는 제어기 메소드. 그런 다음이 컨투어러에서 새 스레드는 Service를 호출하고 주어진 파일에 데이터를 씁니다. b. 보고서의 상태를 사용하여 요청 PARAMS을 보여 컨트롤러 방법 - 파일이 생성되면 파일이 생성 된 경우 확인을 FileID에 여부 -하고 HttpServletResponse 응답 파일을 작성

질문입니다 : 내가 파일 ID를 저장해야하며, 파일 ID를 연결하는 방법을 파일 자체? (캐시 데이터베이스?)

보고서 상태를 어떻게 확인할 수 있습니까? AJAX 요청을 1 ~ 2 초마다 보내는 것에 대해 생각하십니까?

어떤 아이디어와 권장 사항이 있습니까?

답변

1

저에게 따르면 서블릿을 만들어 CSV 파일 다운로드로 응답 할 수 있습니다. 다음과 같은 과정을 고려 : 홈페이지와 버튼 클릭에

열린 새 탭을 (reportId에 URL을 추가 정도)

window.open('/downloadCSV/15646', '_blank'); 

를 그리고이 다운로드 작업

@RequestMapping(path = "/downloadCSV/{reportId}", method = 
    RequestMethod.GET) 
     public void getCSV(@PathVariable String reportId, HttpServletRequest 
     request, HttpServletResponse response) throws Exception { 

      byte[] fileContent; 

      //write your logic or call service to generate csv report and get 
      bytes of file 

       response.setContentType("provide content type"); 
       ServletOutputStream out = response.getOutputStream(); 
       out.write(fileContent); 
       out.flush(); 
      return; 
     } 

이 의지에 대한 서블릿 쓰기 열린 탭에서 파일을 다운로드하십시오.