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

Entrée/Sortie Java Discussion :

enregistrement d'un fichier dans le serveur en local


Sujet :

Entrée/Sortie Java

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 96
    Par défaut enregistrement d'un fichier dans le serveur en local
    Bonjour,
    dans ma classe java qui permet de generer un fichier txt,je donne le chemin de la generation du fichier dans le serveur=>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    filename:D:/reperoire.../nom_fichier.txt
    et comme les utilistaeurs accedent à mon app a distance donc le fichier doit se generer dans leur machine en local
    comment je peux faire pour que les users puissent enregistere leurs fichiers sur leur propre machine
    merci

  2. #2
    Membre émérite Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Par défaut
    On précise le type de contenu de la réponse:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    response.setContentType( "text/plain" );
    On déclare que c'est un "attachement":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    response.setHeader("Content-Disposition", "attachment; filename=" + nomFichier);
    Ensuite tu écris le flux de la réponse:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ServletOutputStream out = response.getOutputStream();
    out.write("toto".getBytes());

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 96
    Par défaut
    Bonjour,
    merci pour votre reponse, c'est la reponse que je cherchais ca fait longtemps.
    j'ai utilisé votre code ,mais en faite le fichier enregistré est vide
    voici mon code:
    code java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    RandomAccessFile rn =new RandomAccessFile(filename,"rw");
    querry="select * from ma_table";
    rs=stt.executeQuery(querry);
    data= rs.getString("champs1")+rs.getString("champs2")....;
    rn.writeBytes(data);
    rs.close();
    rn.close();
    return filename;
    }
    }
    ............
    quand j'execute mon app et j'essaie d'enregistrer mon fichier en local,j'arrive à voire la fenetre d'enregistrement et j'enregistre mon fichier en local mais mon fichier est vide
    comment je peut recupérer le fichier avec son contenu?
    merci

  4. #4
    Membre émérite Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Par défaut
    Que te renvoie??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    reference_ma_classe.getFile();
    Est-ce le contenu de ton fichier texte?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "attachment; filename=" + file_name
    file_name est le nom de fichier par défaut proposé dans la fenêtre de download et non le fichier lui-même. C'est le flux ci-dessous qui s'occupe du contenu.

    ServletOutputStream out = response.getOutputStream();
    out.write("toto".getBytes()); ces deux lignes ne plaisent pas à mon compilateur =>duplicate local variable out
    Dans un premier temps change le nom de la variable, tu as une variable qui porte déjà ce nom.
    Ensuite remplace "toto".getBytes par le contenu de ton fichier.

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 96
    Par défaut
    cette methode dois me retourner le nom du fichier car il est automatique,je ne peut pas donner un autre nom à mon fichier doncj je récupére le nom du fichier dans ma variable file_name
    et le contenu du ficheir je le gere dans ma classe comme vous pouvez le voire dans ma réponse precedente
    je dois en faite récupere le fichier plein et non vide pour l'enregistrer

  6. #6
    Membre émérite Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Par défaut
    Ok le nom de la méthode getFile() était un peu ambigue mais c'etait Ok du coup.
    Pour l'écriture de la réponse, c'est le meme principe que lorsque tu écris ton fichier.
    De manière crado, dans l'exemple en dessous, je lis ton fichier généré et l'écris dans la réponse. Libre à toi de faire du propre.

    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
     
     
    RandomAccessFile file =reference_ma_classe.getFile();
     
    String fileName="fichierTest"+time+".txt";
     
    response.setContentType( "text/plain" );
     
    response.setHeader("Content-Disposition", "attachment; filename="+ fileName);
     
    ServletOutputStream outt= response.getOutputStream();
     
    int car = 0;
    try {
    car = file.read();
    while(car != -1) {
    outt.write(car);
    car = file.read();
    }
    } 
    catch (IOException e) {
    e.printStackTrace("Gestion des erreurs");
    }
    finally {
    try {
    file.close();
    } 
    catch (IOException e) {
    e.printStackTrace("Gestion des erreurs");
    }
    }
    EDIT: deso, j'avais omis qqs ti trucs, ca devait boucler à l'infini xD

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 96
    Par défaut
    je pense que votre idée est bonne ,mais en essayant j'ai eu un message de tomcat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    org.apache.jasper.JasperException: "getOutputStream()" a déjà été appelé pour cette réponse
    que je ne comprend pas

  8. #8
    Membre émérite Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Par défaut
    Ça me parait bien étrange... As-tu ouvert la réponse ailleurs dans le code?
    Peux-tu nous donner le code complet de ton action?

  9. #9
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 96
    Par défaut
    classe java

  10. #10
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 96
    Par défaut
    voici l'erreur affiché sur la consol tomcat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    java.io.IOException: Read error
            at java.io.RandomAccessFile.read(Native Method)

  11. #11
    Membre émérite Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Par défaut
    J'avais pas vu que le code était dans une jsp, désolé.
    Déplace le dans la servlet ou l'action appelé.

  12. #12
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 96
    Par défaut
    j'ai changé ma classe appelée en une servlete
    mais j'ai le méme message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    org.apache.jasper.JasperException: "getOutputStream()" a déjà été appelé pour cette réponse

  13. #13
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 96
    Par défaut
    avez vous une solution pour mon probléme ?,si non est ce que je peux déplacer mon message vers le forum servlets et jsp??

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Enregistrement fichier dans un serveur FTP
    Par Delak dans le forum Général Java
    Réponses: 2
    Dernier message: 12/04/2011, 18h21
  2. Réponses: 7
    Dernier message: 14/02/2009, 16h47
  3. Rechercher, remplacer et enregistrer un fichier dans le serveur
    Par mactittude dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/02/2009, 09h57
  4. upload des fichiers dans mon serveur
    Par abdou.sahraoui dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 29/05/2006, 09h32
  5. [servlet] enregistrer un fichier dans un serveur HTTP
    Par iam_free dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 12/04/2006, 14h58

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