Bonjour,
J'essaie de faire un Servlet dont la seule fonction est de lancer le téléchargement d'un fichier (depuis le serveur, vers le client). Le téléchargement se passe bien pour les petits fichiers, mais le serveur plante lamentablement dès que j'essaie avec des plus gros fichiers (>50mo) :
Voici mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 java.lang.OutOfMemoryError:*Java*heap*space org.apache.commons.io.output.ByteArrayOutputStream.needNewBuffer(ByteArrayOutputStream.java:124) org.apache.commons.io.output.ByteArrayOutputStream.write(ByteArrayOutputStream.java:155) org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1263) org.apache.commons.io.IOUtils.copy(IOUtils.java:1236) org.apache.commons.io.IOUtils.toByteArray(IOUtils.java:360) org.apache.commons.io.FileUtils.readFileToByteArray(FileUtils.java:1360) com.becatalog.servlet.MediaDownload.doGet(MediaDownload.java:51) javax.servlet.http.HttpServlet.service(HttpServlet.java:617) javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
Bon, comme ça, ma première idée c'est de découper le fichier comme un bourin et de l'envoyer en pièces détachées, mais ça me parait long et pas très propre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 response.setContentType(type); // type du fichier response.setHeader("Content-Disposition", "attachment; filename="+name); File file = new File(DBInterface.getFinalDir(), name); // chemin vers le fichier ServletOutputStream out = response.getOutputStream(); out.write(FileUtils.readFileToByteArray(file)); out.flush(); out.close();
Est ce que quelqu'un sait comment je dois m'y prendre pour envoyer un fichier de cette façon?
Merci d'avance : )
Partager