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 :

Traitement d'un fichier en local


Sujet :

Servlets/JSP Java

  1. #1
    Membre confirmé Avatar de KnowPart
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2010
    Messages : 78
    Par défaut Traitement d'un fichier en local
    J'ai un problème de lecture un fichier en locale depuis une page jsp executer côté serveur:

    le code de la page JSP pour récupérer le fichier depuis le disque dur du client:

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    <script type="text/javascript">
            
            function affichePath(){
            var fich;
            fich=document.getElementById('fichier').value;
                    if (fich=="")
                alert('veuillez choisir un fichier');
                    else{
                    document.cloture.action="affichepath.jsp";
                    document.cloture.submit();}
            }
            </script>
    <body>
    <table width="100%" border="0">
     <tr>
      <tr>
        <jsp:include page="header.jsp"/>
      </tr>
     </tr>
      <tr>
    	<td width="100%" height="500px" align="left" background="white" >
     
    		<form  method="post" enctype="multipart/form-data" name="cloture">
            <table class="tablerel">
            <tr class= "jaunef">
                  <td width="100" >fichier : </td>
                  <td width="500"><input   type="file" id="fichier" name="fichier" ></td>
                </tr>
     
                <tr>
                  <td><input class="btn" type="button"   onclick="affichePath();" value="Cloturer"></td>
                  <td>&nbsp;</td>
                </tr>
    			<tr>
    			  <td  style="white-space:nowrap;">${sessionScope.total}</td><td>${sessionScope.tot}</td></tr>
    			  <tr>
    			<tr>
    			  <td  style="white-space:nowrap;">${sessionScope.messageclot}</td><td>${sessionScope.recclot}</td></tr>
    			  <tr>
                  <td  style="white-space:nowrap;">${sessionScope.messagenonclot}</td><td>${sessionScope.nonclot}</td>
                  <td>&nbsp;</td>
                </tr>
        </table>
        </form>
     
     
      <table>
    le code de la page JSP pour le traitement:

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    <% 
            java.sql.Date sqlDate = new java.sql.Date(new java.util.Date().getTime());
            FileChannel in1 = null; // canal d'entrée
            FileChannel in2 = null; // canal d'entrée
    FileChannel out1 = null; // canal de sortie
    FileChannel out2 = null; // canal de sortie
                String fichiersor="c:/noncloturer"+sqlDate+".txt";
                String fichierclot="c:/cloturer"+sqlDate+".txt";
                String fichierenter=null;
                    PreparedStatement ps = null;
                PreparedStatement psi = null;
                PreparedStatement psu=null;
                    String path=null;
                    int i=0;
                int j=0;
                    int k=0;
                    String nom =null;
                Context initContext = new InitialContext();
                Context envContext  = (Context)initContext.lookup("java:/comp/env");
            DataSource ds = (DataSource)envContext.lookup("jdbc/file");
            Connection oraConn = ds.getConnection();
            oraConn.setAutoCommit(false);
            
            
            FileWriter fwr = new FileWriter (fichierclot);
            BufferedWriter bwr = new BufferedWriter (fwr);
            PrintWriter fichierClot = new PrintWriter (bwr);
            
            FileWriter fw = new FileWriter (fichiersor);
            BufferedWriter bw = new BufferedWriter (fw);
            PrintWriter fichierSor = new PrintWriter (bw);
            // Check that we have a file upload request
            boolean isMultipart = ServletFileUpload.isMultipartContent(request);
            // Create a factory for disk-based file items
            FileItemFactory factory = new DiskFileItemFactory();
            
            // Create a new file upload handler
            ServletFileUpload upload = new ServletFileUpload(factory);
            // Parse the request
            List /* FileItem */ items = upload.parseRequest(request);
            //out.print(request);
            // Process the uploaded items
            Iterator iter = items.iterator();
            //out.print(iter);
            
            while (iter.hasNext()) {
            FileItem item = (FileItem) iter.next();
            //out.print(item);  
            File fullFile = new File(item.getName());
            //out.print(fullFile);
            
            nom=fullFile.getName();
            
            path=fullFile.getAbsolutePath();
            String ligne;
            String etat=null;
            ResultSet rs = null;
            fichierenter="c:/"+nom;
            
            Reader r = new BufferedReader(new FileReader(fichierenter));
            InputStream ips=new FileInputStream(fichierenter);
            InputStreamReader ipsr=new InputStreamReader(ips);
            BufferedReader br=new BufferedReader(ipsr);
            fichierClot.println ("Les cloturer : ");
            fichierSor.println  ("Les  non cloturer : ");
            
            while ((ligne=br.readLine())!=null){
          // traitement
            }
              }
                     
                      bwr.close();
                      bw.close();
                       
                       
            %>
    * le problème c'est que je n'arrive pas à récupérer le fichier depuis le disque local du client,il cherche le fichier sur le serveur du tomcat

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2008
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2008
    Messages : 70
    Par défaut
    BOnjour,

    Tu cherche a modifier des fichiers existant directement sur le disque dur de l'utilisateur client ???? Oo et celà à partir d'une JSP



    Il n'est pas bon d'effectuer des traitements de ce type coté client. ( En principe on ne devrait pas avoir de scriptlet java dans une jsp c'est pas propre du tout ) .

    De plus dans ta JSP les path sont absolus Oo

    Le mieux serait d'uploader dans ton serveur les fichiers à traiter et tu les renvoi au client tout simplement.

  3. #3
    Membre confirmé Avatar de KnowPart
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2010
    Messages : 78
    Par défaut
    L'idée c'est d'avoir en entrée un fichier depuis la machine client c'est comme le principe d'un fichier joint,et de faire le traitement de ceux fichier côté serveur.
    Le mieux serait d'uploader dans ton serveur les fichiers à traiter et tu les renvoi au client tout simplement.
    comment je peux uploader les fichiers à traiter au serveur depuis la machine client,sachant que j'ai même pas accès?

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2008
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2008
    Messages : 70
    Par défaut
    Bonjour ,

    L'api d'apache FileUpload te permet de faire celà .

    Cette API est dispo ici : http://commons.apache.org/fileupload/
    Elle permet de récupérer des fichiers envoyées depuis une page web avec la balise input type=file

    la doc est ici : http://commons.apache.org/fileupload/using.html

    Bon courage

  5. #5
    Membre confirmé Avatar de KnowPart
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2010
    Messages : 78
    Par défaut
    Merci pour le lien,c'est ce que j'utilise effectivement dans mon code :

    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
    boolean isMultipart = ServletFileUpload.isMultipartContent(request);
    	// Create a factory for disk-based file items
    	FileItemFactory factory = new DiskFileItemFactory();
     
    	// Create a new file upload handler
    	ServletFileUpload upload = new ServletFileUpload(factory);
    	// Parse the request
    	List /* FileItem */ items = upload.parseRequest(request);
    	//out.print(request);
    	// Process the uploaded items
    	Iterator iter = items.iterator();
    	//out.print(iter);
     
    	while (iter.hasNext()) {
    	FileItem item = (FileItem) iter.next();
    	//out.print(item);  
    	File fullFile = new File(item.getName());
    	//out.print(fullFile);
     
    	nom=fullFile.getName();
     
    	path=fullFile.getAbsolutePath();
    fichierenter=path;
     
    	Reader r = new BufferedReader(new FileReader(fichierenter));
    	InputStream ips=new FileInputStream(fichierenter);
    	InputStreamReader ipsr=new InputStreamReader(ips);
    	BufferedReader br=new BufferedReader(ipsr);
    mais le path retourner dans ce cas est le chemin du serveur tomcat,et comme mois j'execute ma page coté client ,j'ai une erreur de type fichier non trouvé.

  6. #6
    Membre confirmé Avatar de KnowPart
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2010
    Messages : 78
    Par défaut
    Quand j'affiche la valeur de item j'ai comme résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StoreLocation=C:\Program Files\Apache Software Foundation\Tomcat 6.0\temp\upload_14507356_131f10887a6__8000_00000021.tmp, size=71bytes, isFormField=false, FieldName=fichier
    la elle est clair que cette ServletFileUpload creer un fichier temporaire dans le chemin C:\Program Files\Apache Software Foundation\Tomcat 6.0\temp\ avec le nom upload_14507356_131f10887a6__8000_00000021.tmp .

    la question donc est comment récupérer la valeur du chemin du fichier temp?j'ai cherché mais en vain

  7. #7
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Bonjour,

    FileItem est une interface mais la classe concrète dans ton cas est DiskFileItem.
    Cette dernière classe possède la méthode getStoreLocation.

    Remplace la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileItem item = (FileItem) iter.next();
    par la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DiskFileItem item = (DiskFileItem) iter.next();
    et ajuste les commentaires et le code.

    File fullFile = item.getStoreLocation();

    Ça devrait fonctionner

  8. #8
    Membre confirmé Avatar de KnowPart
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2010
    Messages : 78
    Par défaut
    Merci pour votre réponse,j'ai essayé et ça marche.
    Mais là votre methode avec la Class DiskFileItem permet d'uploder toujours le fichier dans le rep temp,j'ai trouver ce code qui permet de paramétrer le chemin de destination:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String realPath = getServletContext().getRealPath(TMP_DIR_PATH);
    		destinationDir = new File(realPath);
                    File file = new File(destinationDir,item.getName()); 
    		item.write(file);

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/05/2006, 23h58
  2. Réponses: 7
    Dernier message: 05/05/2006, 10h44
  3. [INFO] Traitement d'un fichier texte
    Par doudine dans le forum API standards et tierces
    Réponses: 9
    Dernier message: 25/04/2006, 09h23
  4. [VBA-E]Traitement d'un fichier excel
    Par climz dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 12/04/2006, 14h28
  5. [C#] [XML] Traitement de gros fichiers XML (90 Mo)
    Par Pulsahr dans le forum Windows Forms
    Réponses: 20
    Dernier message: 01/12/2005, 14h40

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