Type MIME Content-type pour l'ouverture des fichiers CSV à l'aide d'Excel dans IE & Firefox
J'ai eu un problème avec l'obtention de sortie CSV pour être reconnu & ouvert dans Excel. Dans mon application web, j'ai un java servlet qui renvoie des résultats de recherche à l'utilisateur. Les résultats de la recherche sont livrés par un serveur Apache Solr. Il y a une option sur l'interface graphique front-end " qui permet à l'utilisateur de demander les résultats de la recherche en format “CSV”. Si cette option est sélectionnée, alors la requête est ré-exécuté sur Solr par l'ajout d'un "wt=csv" param. Puis un java filtre ajoute des en-têtes pour retourner les résultats au format CSV formaté en texte. Mais il ne fonctionne pas correctement.
- Dans IE (version 8.0) - je suis invité à “Ouvrir” ou “Enregistrer” le fichier. Si je sélectionne “Ouvrir”; il vient de décharges au format CSV texte sur l'écran au lieu de l'ouvrir dans Excel. Et si je sélectionne “Enregistrer”; je reçois un message d'erreur – “Impossible d'ouvrir ce site internet. Le site requis n'est pas disponible ou ne peut être trouvé”.
- Dans Firefox (version 10.0.9) aussi, j'invite à ouvrir ou enregistrer le fichier. Mais pour ouvrir le fichier CSV; l'option par défaut est le bloc-notes & Excel n'est même pas répertorié. Si je clique sur “Enregistrer”, puis il ne le téléchargement du fichier CSV & je peux l'ouvrir dans Excel et qu'elle est correctement reconnu par Excel.
J'ai essayé une variété d'en-têtes & combinaisons –
//((HttpServletResponse)response).setHeader("Content-Type", "application/octet; charset=utf-8");
((HttpServletResponse)response).setHeader("Content-Type", "text/csv");
//((HttpServletResponse)response).setHeader("Content-Type", "application/vnd.ms-excel");
//((HttpServletResponse)response).setHeader("Cache-Control", "private, private,max-age=0,must-revalidate");
//((HttpServletResponse)response).setHeader("Content-Encoding", "gzip");
//((HttpServletResponse)response).setHeader("Content-Encoding", "binary");
((HttpServletResponse)response).setHeader("Content-Disposition", "attachment; filename=Download.CSV");
//((HttpServletResponse)response).setHeader("Content-Disposition", "inline; filename=Download.CSV;");
Mais aucun d'entre eux semblent être au travail. J'ai utilisé Firefox pour inspecter les en-têtes qui sont envoyés de retour & je vois les suivantes –
Content-Disposition:attachment; filename=Télécharger.CSV
Content-Type:text/plain;charset=UTF-8
Serveur:Jetty(7.x.y-SNAPSHOT)
Transfer-Encoding:chunked
Vary:Accept-Encoding
Même si le type de contenu est spécifié au format csv Ou excel; quand il atteint le navigateur, il est interprété comme text/plain & je pense que c'est la question. Pas sûr de ce que l'en-tête Ou le codage, je devrais être? Toutes les suggestions? Merci.
OriginalL'auteur Yoda_SO_99999 | 2012-12-05
Vous devez vous connecter pour publier un commentaire.
Je suis en train de faire quelque chose de similaire, et c'est la partie du code que j'utilise:
Noter que j'utilise la variable "contentType" pour dire la servlet quel type de fichier sera généré.
Espère que cela fonctionne pour vous.
OriginalL'auteur Laura A. R.