IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

Pb envoi de fichier vers client via "ServletOutputStream"


Sujet :

Servlets/JSP Java

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Pb envoi de fichier vers client via "ServletOutputStream"
    Bonjour à tous,

    Je désire envoyer un fichier vers un client, simplement en proposant un lien qui pointe sur une servlet. Le but est d'utiliser un "ServletOutputStream" (voir code plus bas) . J'ai une erreur persistante "java.io.IOException: Insufficient system resources exist to complete the requested service" au niveau de mon serveur web, un Iplanet 4.1 sous windows NT4, et ceci a pour effet de "tronquer" le téléchargement. En effet, un fichier de 1500 Ko, ne fait que +/- 24 Ko une fois téléchargé

    Voici ce que l'on peut voir au niveau de l'error log du serveur:

    [14/Nov/2006:10:40:37] info ( 788): /servlet/maclasse.class: nom de fichier= f:\websites\monsite\mesfichiers\JT_5829_P_R_3M_Graphic_maker_Vutek_2360_3M_1500_series.zip
    [14/Nov/2006:10:40:37] info ( 788): /servlet/maclasse.class: passé le getOutputstream
    [14/Nov/2006:10:40:37] info ( 788): /servlet/maclasse.class: availableLength= java.io.FileInputStream@85120a8c
    [14/Nov/2006:10:40:37] info ( 788): /servlet/maclasse.class: probleme envoi fichier, erreur= java.io.IOException: Insufficient system resources exist to complete the requested service.

    [14/Nov/2006:10:40:37] info ( 788): /servlet/maclasse.class: id_client= 1488
    Et voici le code dans la servlet:

    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
    String name = nom_fichier_reel;
                    try
                      {
                        ServletOutputStream out2 = res.getOutputStream();
                        log("passé le getOutputstream");
                        res.setHeader("Content-Disposition", "attachment;filename=" + name);
                        FileInputStream in2 = new FileInputStream(fileName);
                        int availableLength = in2.available();
                        log("availableLength= " + in2);
                        byte[] totalBytes = new byte[availableLength];
                        int byteData = in2.read(totalBytes);
                        out2.write(totalBytes);
                        in2.close();
                        out2.flush();
                        out2.close();
     
                      }
     
                    catch (IOException ex)
                      {
                        log("probleme envoi fichier, erreur= " + ex);
                      }
     
                    res.setContentType("text/html");
                    out = new PrintWriter(res.getOutputStream());
    Quelqu'un à une idée?

    D'avance un grand merci

  2. #2
    Membre éclairé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 346
    Points : 737
    Points
    737
    Par défaut
    Une solution serait d'écrire en plusieurs fois dans la requête, le principe du buffer quoi.

    Au lieux d'écire d'un coup tout les bytes de ton fichier, tu les écrit par bloc de 4096 bytes par exemple. Par celà tu bufferise ce qui permet d'éviter de surcharger ton server.

    De plus, sous IE, c'est obligatoire de donner la taille du fichier dans la requête avant d'écrire dessus sinon il refuse le fichier (request.setLength() je pense).

    Mais moi, rien qu'en précisant la taille de la requête et en écrivant en une foi ça marche quand même, mais un system bufferisé est toujours préférable.

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [résolu]
    Merci woodwai pour l'idée d'utiliser un buffer.

    J'ai modifié mon code et cela marche maintenant!

Discussions similaires

  1. Envoi de fichier en POST via une URL vers une page php
    Par Supersonik dans le forum Entrée/Sortie
    Réponses: 14
    Dernier message: 21/07/2011, 16h47
  2. Envoi de fichier au client depuis une servlet
    Par vedrfolnir dans le forum Servlets/JSP
    Réponses: 12
    Dernier message: 04/07/2006, 14h57
  3. [vba] Envoi de fichier ascii client Windows => server Lin
    Par kremvax dans le forum Général VBA
    Réponses: 3
    Dernier message: 28/11/2005, 12h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo