Bonjour à tous,
bon j'espère ne pas reposter un problème déjà abordé. Ça m'étonnerait vraiment vu que ça fait 4 jours que j'ai beau tourner le problème dans tous les sens, demander à google en fr ou eng, je ne trouve aucune de solution. Si c'est le cas je m'excuse d'avance.
J'essaie de faire quelque chose de très simple, avoir la popup windows "Ouvrir/Enregistrer" un fichier. Malheureusement au lieu de m'ouvrir la popup, le navigateur (IE 6 ou Firefox dernière version) s'évertue à vouloir ouvrir le contenu de mon fichier dans le navigateur (ici exemple avec une image png) :
IE 6 :
FF :
J'ai farfouillé partout, je n'ai rien trouvé... Voici mon code :
J'ai essayé en stockant le contenu du ficher en base via un byte[] ou un Blob, là ma dernière tentative en stockant le fichier directement sur le serveur (ce qui me permet de vérifier que le fichier n'est pas corrompu). Rien à faire... J'ai écrit, cassé et recassé tout mon code, pour en arriver toujours au même point... Le pire c'est que par ailleurs pour une autre fonctionnalité de mon appli, je génère un fichier excel qui se télécharge sans problème...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 BufferedInputStream fileInBuf = null; try { String filePath = PATH + model.getMaConversation().getConversationId() + "\\" + model.getPostSelectedId() + "\\"; File file = new File(filePath + model.getPieceJointeSelectedName()); HttpServletResponse res = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse(); ServletContext servletContext = (ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext(); res.reset(); String mimeType = servletContext.getMimeType(file.getName()); if (mimeType == null) { mimeType = "application/octet-stream"; } res.setContentType(mimeType); res.setHeader("Content-disposition", "attachment; filename=" + file.getName() + "\""); int bufferSize = 64 * 1024; byte[] buf = new byte[bufferSize]; try { fileInBuf = new BufferedInputStream(new FileInputStream(file), bufferSize*2); ByteArrayOutputStream baos = new ByteArrayOutputStream(); int length; while((length = fileInBuf.read(buf)) > 0) { baos.write(buf, 0, length); } res.getOutputStream().write(baos.toByteArray()); res.getOutputStream().flush(); res.getOutputStream().close(); FacesContext faces = FacesContext.getCurrentInstance(); faces.responseComplete(); } catch(Exception e) { e.printStackTrace(); } } finally { try { fileInBuf .close(); } catch (Exception e) { e.printStackTrace(); } }
Y aurait-il une âme charitable pour me venir en aide... ?![]()
Partager