Edição abrir documentos do Excel com o Internet Explorer
-
03-07-2019 - |
Pergunta
Eu ter executado em um problema em que o IE não abrir o Salvar como caixa de diálogo / Open para um documento Excel como o Firefox faz.
Então, eu criei um filtro de servlet que está usando '* .xls', como o padrão de URL. A questão que agora face (uma vez que este é o primeiro filtro que tenha criado) é a forma de obter o nome do arquivo que o usuário quer para que a caixa de diálogo é preenchido corretamente. Atualmente, o filtro é invocada quando o usuário seleciona um link em uma determinada página.
Aqui está o que eu vim com:
A descrição acima é o que eu tenho 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>
Isso tudo está trabalhando em minha caixa de desenvolvimento: Windows XP, JBoss, Eclipse, Oracle. Mas quando ele é executado no teste servidor Linux, Apache / JBoss, Oracle ele não funciona. Parece que o filtro não é mesmo a ser chamado, sem erros jogado, etc. Alguma idéia de por que isso iria acontecer?
Solução
Você quer que o conteúdo definido tipo de forma adequada, bem como o cabeçalho de disposição de conteúdo, assim:
response.setContentType ( "application / vnd.ms-excel");
response.setHeader ( "Content-Disposition", "Anexo; nome do ficheiro = \"" + + nome "\" ");
Outras dicas
Use o Content-Disposition
cabeçalho HTTP e configurá-lo para algo como:
attachment; filename=myworkbook.xls
A é um Microsoft Knowledge Base artigo tudo sobre este problema. E aqui é um exemplo de configuração Content-Disposition em código Java .
Além de definir os cabeçalhos para o tipo de conteúdo, você também vai querer garantir que o servidor não dizer ao navegador para não CACHE o arquivo.
No IE terra, se você contar o IE não para armazenar em cache o arquivo, ele alegremente faz o download do arquivo ... então tenta abrir o arquivo do diretório que salvou o arquivo ... No entanto, desde os cabeçalhos disse "don' t cache" que leva este literalmente, e não salva o arquivo, assim, Excel gera um erro dizendo: 'não há nenhum arquivo!'.
Para encurtar a história, dizer IE para armazenar em cache o arquivo .