복붙노트

[SPRING] 봄 - 파일 다운로드 및 리디렉션

SPRING

봄 - 파일 다운로드 및 리디렉션

나는 잘 작동하는 나의 페이지에 다운로드 연결이있다 그러나 나의 페이지를 상쾌하게하고 / 방향을 바꾸지 않는다. 여기 내 코드가있다.

@RequestMapping(method = RequestMethod.POST, params = "exportToXML")
public String exportToXML(HttpServletResponse response, Model model, @ModelAttribute(FILTER_FORM) ScreenModel form,
        BindingResult result, OutputStream out,
        HttpSession session) throws IOException {
    ZipOutputStream zipout;
    ByteArrayOutputStream baos = new ByteArrayOutputStream();


        zipout = new ZipOutputStream(baos);
        ZipEntry ze = new ZipEntry("file.xml");
        zipout.putNextEntry(ze);
        zipout.write(string.getBytes());
        zipout.closeEntry();
        zipout.close();
        baos.close();


    response.setContentType("application/vnd.ms-excel");
    response.setHeader("Content-disposition", "attachment; filename=xx.zip");
    response.getOutputStream().write(baos.toByteArray());
    response.getOutputStream().close();
    response.getOutputStream().flush();
    return VIEW_NAME;
}

관련성없는 코드를 제거하여 조금 더 짧게 만들었습니다. @ResponseBody로 시도했지만 위의 코드와 동일한 결과를 제공합니다. 조언이 도움이 될 것입니다.

해결법

  1. ==============================

    1.파일을 다운로드하고 새로 고침 / 리디렉션을 할 수 없습니다. 나는 원인을 설명하려고 노력할 것이다. 요청 흐름은 다음과 같습니다.

    파일을 다운로드하고 새로 고침 / 리디렉션을 할 수 없습니다. 나는 원인을 설명하려고 노력할 것이다. 요청 흐름은 다음과 같습니다.

    노란색 원은 컨트롤러입니다. 프런트 컨트롤러가 뷰 이름을 반환하면 적절한 뷰 템플릿 (구성된 뷰 확인자에 따라 jsp, 타일 또는 기타)이 응답을 받고 html (또는 html이 아닌) 코드가 생성됩니다.

    귀하의 경우에는 다음과 같은 조치를 취하십시오.

    response.getOutputStream().write(baos.toByteArray());
    response.getOutputStream().close();
    response.getOutputStream().flush();
    

    그 작업 후에는 봄이 응답을 열고 그 전에 새로 고친 페이지를 쓸 수 없습니다 (전에했기 때문에). 따라서 메소드 서명을 다음과 같이 변경할 수 있습니다.

    public void exportToXML(HttpServletResponse response, Model model, @ModelAttribute(FILTER_FORM) ScreenModel form,
            BindingResult result, OutputStream out,
            HttpSession session) throws IOException {
    

    마지막으로 'VIEW_NAME 돌아 가기'를 삭제하십시오. 아무것도 변하지 않을 것입니다.

  2. ==============================

    2.할 수있는 일 :

    할 수있는 일 :

    response.setHeader("Refresh", "1; url = index");
    

    이렇게하면 URL : "index"에 대한 응답 후 1 초 후 페이지가 새로 고침됩니다.

  3. ==============================

    3.그건 그렇지 않을거야. 브라우저는 새 창에서 ms-excel contentType을 열거 나 다운로드 프롬프트를 표시합니다. 다운로드를 시작한 페이지는 리디렉션 또는 페이지 전환을 처리 할 기회가 없습니다.

    그건 그렇지 않을거야. 브라우저는 새 창에서 ms-excel contentType을 열거 나 다운로드 프롬프트를 표시합니다. 다운로드를 시작한 페이지는 리디렉션 또는 페이지 전환을 처리 할 기회가 없습니다.

    다운로드 + 페이지 새로 고침이 필요한 경우 JavaScript 함수가 다운로드를 시작하고 사용자에게 다음 페이지로 안내 할 수 있습니다.이 페이지는 '다운로드가 곧 시작됩니다'또는 비슷한 것을 말합니다.

  4. ==============================

    4.당신은 다운로드 후, 당신에게 컨트롤러에 제출하고 다른 페이지를 표시하는 자바 스크립트 함수를 호출 할 수 있습니다.

    당신은 다운로드 후, 당신에게 컨트롤러에 제출하고 다른 페이지를 표시하는 자바 스크립트 함수를 호출 할 수 있습니다.

  5. from https://stackoverflow.com/questions/18275043/spring-download-file-and-redirect by cc-by-sa and MIT license