dans mon équipe au travail Je travaille sur une application GWT qui donne à chaque équipe de l'entreprise un aperçu de ce qu'ils doivent faire. Le programme fonctionne mais maintenant nous voulons que le tableau Excel que vous pouvez télécharger soit un * .xlsx et non un xls Tout ce projet est nouveau pour moi et je me considère comme un débutant dans GWT.GWT Télécharger Excel .xlsx me donne un fichier corrompu
Dans le code lorsque le nom de fichier est donné pour l'Exceltable, il y a un ".xls" à la fin. Mais quand je le change en + ".xlsx" et que je teste l'application, le téléchargement fonctionne toujours mais quand j'essaie d'ouvrir le fichier dans Excel, il me montre un message d'erreur et me dit que le fichier est corrompu ?! (.xls fonctionne)
Pouvez-vous m'expliquer comment fonctionne un téléchargement dans GWT avec un serveur Excel généré par serveur? Peut-être que vous avez des idées Quelles sont les causes du fichier à corrompu (Malheureusement, le programmeur de cette application est en vacances donc je ne peux pas lui demander ...)
Merci à l'avance
modifier:
public class Download extends HttpServlet {
private static final long serialVersionUID = 5580666921970339383L;
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String filename = (String)request.getSession().getAttribute(CrossReportConstants.ATTR_FILENAME);
byte[] data = (byte[])request.getSession().getAttribute(CrossReportConstants.ATTR_REPORT);
request.getSession().setAttribute(CrossReportConstants.ATTR_FILENAME, null);
request.getSession().setAttribute(CrossReportConstants.ATTR_REPORT, null);
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=" + filename);
response.setHeader("Pragma", "no-cache");
response.setHeader("Expires", "0");
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setContentLength(data.length);
try {
InputStream in = new ByteArrayInputStream(data);
ServletOutputStream out = response.getOutputStream();
byte[] outputByte = new byte[4096];
// copy binary contect to output stream
while (in.read(outputByte, 0, 4096) != -1) {
out.write(outputByte, 0, 4096);
}
in.close();
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Pouvez-vous fournir le code que vous essayez de modifier? On dirait que vous changez simplement le nom du fichier dans la réponse http, mais pas le type de contenu. – Akkusativobjekt
@Akkusativobjekt Le problème est que je ne suis pas vraiment autorisé à poster du code ici .... et l'ensemble du projet est relativement grand, il a plus de 80 classes et en ce moment im essayant de comprendre où je dois changer quelque chose .... malheureusement Je ne peux pas demander à mon collègue parce qu'il est en vacances .... si je trouve le code partie je vais le partager – KilledByCheese
S'il s'agit d'un HttpServlet chercher quelque chose comme response.setContentType ("application/vnd.ms-excel"); – Akkusativobjekt