Salut !
Je viens demander un p'tit coup de main afin de cerner mon problème. Voici une portion du code de ma servlet DownloadDocument permettant l'accès à un document en ligne. Les lignes en oranges sont mes dernières modifications suite à ma balade matinale sur Internet à la recherche d'explications.
Pour vous décrire le problème... il n'y en n'a pas ! x) Enfin, si, mais je n'arrive pas à le reproduire. C'est un client qui nous a remonté l'information, chez lui le problème semble survenir régulièrement. Lorsqu'il télécharge un document celui-ci n'est qu'en partie transmis.
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 // Tell the browser that the received data is a file. p_oResponse.setContentType("application/octet-stream"); // Avoid "DownloadDocument" as the title of the downloaded document. p_oResponse.setHeader("Content-Disposition", "attachment; filename=\"" + oDocument.getName() + "\""); FileInputStream oInput = null; try { File oFile = new File(oDocument.getAbsolutePath()); p_oResponse.setContentLength((int)oFile.length()); oInput = new FileInputStream(oFile); BufferedOutputStream oOutput = new BufferedOutputStream(p_oResponse .getOutputStream()); int iPacketSize = 1024; byte[] aBytes = new byte[iPacketSize]; int iReadBytesCount = 0; while((iReadBytesCount = oInput.read(aBytes, 0, iPacketSize)) > -1) { oOutput.write(aBytes, 0, iReadBytesCount); oTraceOutput.write(aBytes, 0, iReadBytesCount); } oOutput.flush(); oOutput.close(); } catch(Exception oException) { throw oException; } finally { if(oInput != null) { oInput.close(); } }
J'ai fait un test pour vérifier ses dires : lorsqu'un document est téléchargé le serveur me laisse une trace de ce qui est émis sur le flux de sortie en créant un document temporaire. J'ai donc pu constater, en effet, que les documents n'étaient que partiellement transmis...
Est-ce qu'à première vue mon code comporte des fautes ? Des lacunes qui rendraient possibles ce genre de mésaventures ? À seconde vue ?.. ^^'
En manipulant mon outils je me suis apperçu que lorsqu'un navigateur s'adressait à mon serveur afin d'obtenir un document il commence parfois le téléchargement avant même que l'utilisateur ne confirme sa volonté d'obtenir le document. Une sorte d'anticipation j'imagine.
J'ai aussi pu constaté que lorsqu'on annule un téléchargement, bien évidemment, l'écriture dans le flux est interrompue à la demande de l'utilisateur et la trace que j'ai du transfert est donc, cette fois encore, partielle.
Je n'arrive donc pas à isoler le cas de figure qui ferait que le téléchargement se fait de manière partielle sans intervention de l'utilisateur (puisque le client s'étonne que ça ne marche pas j'imagine qu'il ne fait pas exprès d'annuler le téléchargement - si c'est une question d'annulation).
Une idée ? Deux idées ?.. Inspirés ? ^^'
Merci à vous !
Partager