Mon application Web exécute Tomcat 8. Un fichier .docx est correctement téléchargé sur le serveur et téléchargé à l'aide du code java suivant contenu dans un fichier jsp.Le téléchargement Java corrompt le fichier .docx en ajoutant un caractère
File f = new File (Monitor.getPropertyValue("myDir") + (request.getParameter("file")));
String filename=request.getParameter("original");
response.setContentLength((int) f.length());
response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
response.setHeader ("Content-Disposition", "attachment; filename="+filename);
InputStream in = new FileInputStream(f);
ServletOutputStream outs = response.getOutputStream();
int bit = 256;
int i = 0;
try {
while ((bit) >= 0) {
bit = in.read();
outs.write(bit);
}
}
catch (IOException ioe) {
ioe.printStackTrace(System.out);
}
outs.flush();
outs.close();
in.close();
Cependant quand je tente d'ouvrir le fichier téléchargé, il est corrompu et Word ne l'ouvrir (sans le fixer en premier)
Quand je comparais le fichier original et le fichier téléchargé puis j'ai remarqué que le fichier téléchargé a un caractère supplémentaire à la fin - FF (hex)
Si je supprime ce caractère supplémentaire avec un éditeur hexadécimal, le fichier ouvre bien.
Pourquoi ce caractère supplémentaire a-t-il été ajouté?
Vous ne devriez pas utiliser un 'JSP' pour télécharger un fichier binaire. Ecrivez une servlet à la place. – Xvolks
Je sais - c'est un vieux code que je n'ai pas écrit. Pensez-vous que c'est la source du problème, ou suggérez-vous simplement de bonnes pratiques de programmation? – gordon613
Bonne pratique. J'ai déjà fait des choses laides comme ça dans le passé et j'ai appris à la dure à ne pas le faire. – Xvolks