Domanda

Ho riscontrato un problema in cui IE non apre la finestra di dialogo Salva con nome / Apri per un documento Excel come Firefox.

Quindi ho creato un filtro servlet che utilizza '* .xls' come pattern url. Il problema che ora devo affrontare (poiché questo è il primo filtro che ho creato) è come ottenere il nome del file desiderato dall'utente in modo che la finestra di dialogo venga popolata correttamente. Attualmente il filtro viene invocato quando l'utente seleziona un collegamento in una determinata pagina.

Ecco cosa mi è venuto in mente:

Quanto sopra è quello che ho 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>

Tutto funziona sulla mia scatola di sviluppo: Windows XP, JBoss, Eclipse, Oracle. Ma quando viene eseguito sul server di prova & # 8212; Linux, Apache / JBoss, Oracle & # 8212; non funziona. Sembra che il filtro non venga nemmeno chiamato, nessun errore generato, ecc. Qualche idea sul perché ciò accada?

È stato utile?

Soluzione

Si desidera impostare il tipo di contenuto in modo appropriato e l'intestazione di disposizione del contenuto, quindi:

  

response.setContentType (" applicazione / vnd.ms-excel ");
  response.setHeader (" Content-Disposition " ;,   & Quot; allegato; filename = \ " " + nome file +   & Quot; \ " ");

Altri suggerimenti

Usa l'intestazione HTTP Content-Disposition e impostala su qualcosa del tipo:

attachment; filename=myworkbook.xls

Questo è un articolo della Microsoft Knowledge Base tutto su questo problema. Ed ecco un esempio di impostazione della disposizione dei contenuti nel codice Java .

Oltre a impostare le intestazioni per il tipo di contenuto, dovrai anche assicurarti che il server NON dica al browser di NON CACHE il file.

In IE land, se dici a IE di non memorizzare nella cache il file, scarica felicemente il file ... quindi prova ad aprire il file dalla directory in cui ha salvato il file in ... Tuttavia, poiché le intestazioni dicevano " don 't cache " prende questo alla lettera e non salva il file, quindi Excel genera un errore che dice: "Non esiste alcun file!"

Per farla breve, dì a IE di CACHE il file .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top