문제

IE가 Firefox와 같은 Excel 문서의 Save AS/Open 대화 상자를 열지 않는 문제가 발생했습니다.

따라서 URL 패턴으로 '*.xls'를 사용하는 서블릿 필터를 만들었습니다. 내가 직면 한 문제 (내가 만든 첫 번째 필터이기 때문에)는 대화 상자가 올바르게 채워 지도록 사용자가 원하는 파일 이름을 얻는 방법입니다. 현재 사용자가 주어진 페이지에서 링크를 선택하면 필터가 호출됩니다.

다음은 다음과 같이 생각해 냈습니다.

위는 내가 dofilter ()를 가지고있는 것입니다.

String fileName = "fileName.xls";

HttpServletRequest httpRequest = (HttpServletRequest) pRequest;
String requestURI = httpRequest.getRequestURI();

if(StringUtils.isNotBlank(requestURI))
{
  String uri[] = StringUtils.split(requestURI, '/');
  fileName = uri[uri.length - 1];
}

HttpServletResponse httpResponse = (HttpServletResponse) pResponse;
httpResponse.setContentType("application/vnd.ms-excel");
httpResponse.setHeader("Content-disposition", "attachment; filename=\"" + fileName +"\"");

web.xml :

<filter>
    <filter-name>ExcelFilter</filter-name>
    <filter-class>vsg.rp.common.ExcelFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>ExcelFilter</filter-name>
    <url-pattern>*.xls</url-pattern>
</filter-mapping>

이 모든 것은 Windows XP, Jboss, Eclipse, Oracle과 같은 내 개발 상자에서 작업하고 있습니다. 그러나 테스트 서버 (llinux, apache/jboss, oracle)에서 실행되면 작동하지 않습니다. 필터를 호출하지 않고 오류가 발생하지 않는 것 같습니다. 왜 이런 일이 일어날 지에 대한 아이디어가 있습니까?

도움이 되었습니까?

해결책

컨텐츠 유형을 적절하게 설정하고 콘텐츠 배치 헤더를 원합니다.

Response.setContentType ( "application/vnd.ms-excel");
response.setHeader ( "내용화", "첨부 파일; filename = " " + filename +" "");

다른 팁

사용 Content-Disposition http 헤더와 다음과 같은 것으로 설정하십시오.

attachment; filename=myworkbook.xls

a Microsoft Knowledge Base 기사 이 문제에 관한 모든 것. 그리고 여기에 있습니다 Java 코드에서 컨텐츠 예치를 설정하는 예.

콘텐츠 유형의 헤더를 설정하는 것 외에도 서버가 브라우저에 파일을 캐시하지 말라고 지시하지 않도록해야합니다.

IE Land에서 IE가 파일을 캐시하지 말라고 말하면 파일을 행복하게 다운로드합니다. 그런 다음 디렉토리에서 파일을 열려고 시도합니다. 문자 그대로 이것을 필요로하고 파일을 저장하지 않으므로 Excel은 "파일이 없습니다!"라는 오류가 발생합니다.

짧은 이야기, IE에게 파일을 캐시하도록 지시하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top