Question

J'ai rencontré un problème dans lequel IE n'ouvre pas la boîte de dialogue Enregistrer sous / Ouvrir pour un document Excel, comme Firefox.

J'ai donc créé un filtre de servlet qui utilise "* .xls" comme modèle d'URL. Le problème auquel je suis maintenant confronté (puisqu'il s'agit du premier filtre que j'ai créé) consiste à obtenir le nom du fichier souhaité par l'utilisateur afin que la boîte de dialogue soit correctement renseignée. Actuellement, le filtre est appelé lorsque l'utilisateur sélectionne un lien sur une page donnée.

Voici ce que j'ai créé:

Ce qui précède est ce que j'ai 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>

Tout cela fonctionne sur ma boîte de développement: Windows XP, JBoss, Eclipse, Oracle. Mais lorsqu'il fonctionne sur le serveur de test (Linux, Apache / JBoss, Oracle), il ne fonctionne pas. Il semble que le filtre ne soit même pas appelé, aucune erreur ne soit renvoyée, etc. Vous ne savez pas pourquoi cela se produirait?

Était-ce utile?

La solution

Vous souhaitez que le type de contenu soit défini correctement ainsi que l'en-tête de disposition du contenu, par exemple:

  

response.setContentType ("application / vnd.ms-excel");

  response.setHeader ("Content-Disposition",   "attachement" nom de fichier = \ " " + nom de fichier +   "\";);

Autres conseils

Utilisez l'en-tête HTTP Content-Disposition et définissez-le comme suit:

attachment; filename=myworkbook.xls

Il s'agit d'un article de la Base de connaissances Microsoft sur ce problème. Et voici un exemple de définition de Content-Disposition dans le code Java .

En plus de définir les en-têtes pour le type de contenu, vous devez également vous assurer que le serveur NE dit PAS au navigateur de ne PAS CACHE le fichier.

Dans IE Land, si vous indiquez à IE de ne pas mettre le fichier en cache, il télécharge le fichier avec joie ... puis tente d'ouvrir le fichier à partir du répertoire dans lequel il a enregistré le fichier ... Toutefois, les en-têtes indiquant "don" 'cache pas " cela prend littéralement cela et ne sauvegarde pas le fichier, donc Excel génère une erreur disant: "Il n’ya pas de fichier!".

En résumé, dites à IE de transmettre à CACHE le fichier .

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top