호출시 Open/Save 대화 상자를 시작하기 위해 호출해야하는 Spring 3 프레임 워크 webapp에서 다운로드 컨트롤러를 구현했습니다.Spring 3 MVC - 브라우저에서 내 다운로드가 .htm 파일이라고 생각합니다.
사실 열기/저장 대화 상자가 나타나고 저장이 제대로 작동합니다. 그러나 열기를 클릭하면 내 파일 이름에 ".htm"이 추가되고 잘못 표시됩니다. 왜?
컨트롤러 :
@RequestMapping("download/downloadFile")
@ResponseBody
public byte[] downloadFile(@RequestParam String fileID, HttpServletResponse response) {
response.setContentType("application/octet-stream");
File file = getFileByID(fileID);
byte[] bytes = FileCopyUtils.copyToByteArray(file);
response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"");
response.setContentLength(bytes.length);
return bytes;
}
나는 응답 헤더 내가 볼 참조
컨텐츠 유형이 text/html과, 내 응용 프로그램/octet-stream을로 설정 무시처럼!Cache-Control no-cache, no-store
Connection close
Content-Disposition attachment; filename="test.txt"
Content-Length 22071
Content-Type text/html
Date Tue, 05 Feb 2013 21:12:20 GMT
Expires Thu, 01 Jan 1970 00:00:00 GMT
Pragma no-cache
Server Apache/2.2.10 (Linux/SUSE)
X-Powered-By Servlet/2.5 JSP/2.1
X-UA-Compatible IE=8, chrome=1
아마도 web.xml에서 스프링 MVC를 설정 한 방법 때문일 수 있습니까?
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
모든 것이 ".html"로 끝나는 URL로 매핑되고 브라우저가이를보고 있습니까?
'getFileByID (fileID)'는 저장소 메소드입니까? 실제로'file.getName()'에 의해 반환되는 것은 무엇입니까? 추적 할 때 무엇이 보이나요? 'System.out.println (file.getName());'을 실행하고 서버 콘솔에서 생성 된 내용을 확인하십시오. – Lion
java.io.File 객체를 반환하는 것이 적절한 방법이므로 getName() 메서드는 Java의 IO 라이브러리에서 가져온 것이고 "test.txt"를 반환합니다 (그러나 txt 파일은 이미지/PDF를 시도 할 때 최상의 샘플이 아닙니다. 파일에 올바른 파일 이름이 표시됨) – Trant
클라이언트 쪽에서 어떤 헤더를 지정 했습니까? JSON을 다루므로 헤더 : { 'Accept': 'application/json', 'Content-Type': 'application/json' } '이어야합니다. 응답 헤더는 사용자가 지정한대로 적절합니다. – Lion