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) :
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)
Voici mon code :
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();
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.
Est ce que quelqu'un sait comment je dois m'y prendre pour envoyer un fichier de cette façon?

Merci d'avance : )