[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.파일을 다운로드하고 새로 고침 / 리디렉션을 할 수 없습니다. 나는 원인을 설명하려고 노력할 것이다. 요청 흐름은 다음과 같습니다.
파일을 다운로드하고 새로 고침 / 리디렉션을 할 수 없습니다. 나는 원인을 설명하려고 노력할 것이다. 요청 흐름은 다음과 같습니다.
노란색 원은 컨트롤러입니다. 프런트 컨트롤러가 뷰 이름을 반환하면 적절한 뷰 템플릿 (구성된 뷰 확인자에 따라 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.할 수있는 일 :
할 수있는 일 :
response.setHeader("Refresh", "1; url = index");
이렇게하면 URL : "index"에 대한 응답 후 1 초 후 페이지가 새로 고침됩니다.
-
==============================
3.그건 그렇지 않을거야. 브라우저는 새 창에서 ms-excel contentType을 열거 나 다운로드 프롬프트를 표시합니다. 다운로드를 시작한 페이지는 리디렉션 또는 페이지 전환을 처리 할 기회가 없습니다.
그건 그렇지 않을거야. 브라우저는 새 창에서 ms-excel contentType을 열거 나 다운로드 프롬프트를 표시합니다. 다운로드를 시작한 페이지는 리디렉션 또는 페이지 전환을 처리 할 기회가 없습니다.
다운로드 + 페이지 새로 고침이 필요한 경우 JavaScript 함수가 다운로드를 시작하고 사용자에게 다음 페이지로 안내 할 수 있습니다.이 페이지는 '다운로드가 곧 시작됩니다'또는 비슷한 것을 말합니다.
-
==============================
4.당신은 다운로드 후, 당신에게 컨트롤러에 제출하고 다른 페이지를 표시하는 자바 스크립트 함수를 호출 할 수 있습니다.
당신은 다운로드 후, 당신에게 컨트롤러에 제출하고 다른 페이지를 표시하는 자바 스크립트 함수를 호출 할 수 있습니다.
from https://stackoverflow.com/questions/18275043/spring-download-file-and-redirect by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 봄 석영 크론 작업을 동적으로 스케줄링 하시겠습니까? (0) | 2019.04.11 |
---|---|
[SPRING] Spring에서 순서대로 콩을 인스턴스화 하시겠습니까? (0) | 2019.04.11 |
[SPRING] spring aspectj - 외부 항아리를 짜는 컴파일 시간 (0) | 2019.04.11 |
[SPRING] STS를 사용하여 새로운 웹 어플리케이션 프로젝트를 생성 할 때 Spring MVC 프로젝트를 찾을 수 없습니까? (0) | 2019.04.10 |
[SPRING] Spring의 @RepositoryRestResource REST API를 통해 다 - 대 - 다 관계에 요소를 추가하는 방법? (0) | 2019.04.10 |