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?

Foi útil?

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 .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top