55 votes

Comment forcer le navigateur à télécharger le fichier ?

Tout fonctionne bien, mais seulement si le fichier est petit, environ 1 Mo, lorsque je l'ai essayé avec des fichiers plus volumineux, comme 20 Mo, mon navigateur l'affiche, au lieu de forcer le téléchargement, j'ai essayé de nombreux en-têtes jusqu'à présent, maintenant mon code ressemble à :

 PrintWriter out = response.getWriter();
String fileName = request.getParameter("filename");

File f= new File(fileName);

InputStream in = new FileInputStream(f);
BufferedInputStream bin = new BufferedInputStream(in);
DataInputStream din = new DataInputStream(bin);

while(din.available() > 0){
    out.print(din.readLine());
    out.print("\n");
}

response.setContentType("application/force-download");
response.setContentLength((int)f.length());
response.setHeader("Content-Transfer-Encoding", "binary");
response.setHeader("Content-Disposition","attachment; filename=\"" + "xxx\"");//fileName);


in.close();
bin.close();
din.close();

6voto

Vladimir Dyuzhev Points 10647

Définissez le type de contenu et d'autres en-têtes avant d'écrire le fichier. Pour les petits fichiers, le contenu est mis en mémoire tampon et le navigateur obtient les en-têtes en premier. Pour les grands, les données passent en premier.

4voto

f1sh Points 2242

Il s'agit d'un script php qui résout parfaitement le problème avec tous les navigateurs que j'ai testés (FF depuis 3.5, IE8+, Chrome)

 header("Content-Disposition: attachment; filename=\"".$fname_local."\"");
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($fname));

Donc, d'après ce que je peux voir, vous faites tout correctement. As-tu vérifié les paramètres de ton navigateur ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X