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 :

Comment récupérer le path d'un fichier à partir de "Parcourir"


Sujet :

Servlets/JSP Java

  1. #1
    Membre à l'essai
    Femme Profil pro
    Développeur Java
    Inscrit en
    Février 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 45
    Points : 23
    Points
    23
    Par défaut Comment récupérer le path d'un fichier à partir de "Parcourir"
    Bonjour,
    Je suis débutante sur Java, RichFaces et mon application est une application java qui utilise une interface web avec des composants RichFaces (xhtml).

    Ce que je cherche désespéremment à faire est d'afficher une interface qui permet aux utilisateurs de choisir un répertoire (ou des fichiers de ce répertoire) à travers l'interface "Parcourir", puis je récupère juste après le path du répertoire pour faire mes traitements.

    - FileUpload charge le(s) fichier(s) sans que je puisse récupérer le nom (je ne veux pas charger les fichiers, j'ai mes propres traitements).
    - <input type=file> ... je n'arrive pas à récupérer le nom et parait qu'il ne renvoi pas le path complet
    - input juste du texte c'est possible mais je veux offrir à l'utilisateur l'interface "parcourir" pour leur faciliter la recherche du répertoire...

    Les experts dans la matière, merci d'avance de m'aider ... j'ai pas mal cherché mais je me perd un peu !

  2. #2
    Membre régulier Avatar de yacine.dev
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Points : 88
    Points
    88
    Par défaut uplode un fichier avec jsp
    voiçi un code c'est peut etre ce que tu cherche.
    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
     
       <%@ page import="org.apache.commons.fileupload.*,org.apache.commons.fileupload.*,org.apache.commons.fileupload.DiskFileUpload,java.util.List,org.apache.commons.fileupload.disk.*,org.apache.commons.fileupload.servlet.*,java.util.*,java.io.*,java.io.InputStream" %>
            <% 
            // 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);
     
    // Process the uploaded items
    Iterator iter = items.iterator();
    while (iter.hasNext()) {
        FileItem item = (FileItem) iter.next();
     
        if (item.isFormField()) {
           String fieldName = item.getFieldName();
    if(fieldName.equals("name"))
    request.setAttribute("msg", "Thank You: " + item.getString());
        } else {
            
           File fullFile = new File(item.getName());
           String nom=fullFile.getName();
                  File savedFile = new File("c:/tmp/", fullFile.getName());
     
    item.write(savedFile);
        }
    }
            %>

  3. #3
    Membre à l'essai
    Femme Profil pro
    Développeur Java
    Inscrit en
    Février 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 45
    Points : 23
    Points
    23
    Par défaut
    Merci pour l'aide.
    Je ne suis pas sûre de bien comprendre ton code ... (je n'y connais rien en web, je débute)

    A priori dans la variable "request" tu dois trouver l'url ou le path du(des) fichier's) non ?

    C'est ce qu'envoi le client (ie l'interface JSF/RichFaces pour mon application), et je crois que c'est ça que je cherche à récupérer.

    Quel est le code à mettre dans l'xhtml pour que l'utilisateur puisse fournir le path (== request ?) pour communiquer à la partie serveur java ?

    Est-ce que tu peux m'expliquer un peu plus s'il te plait ?

  4. #4
    Membre régulier Avatar de yacine.dev
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Points : 88
    Points
    88
    Par défaut
    le code que je t'ai donné est du jsp donc. il contient les classes que tu auras besion.je vais me renseigner sur richfaces en attendant tu peux chercher de la fonctionnalité de chaque classe pour bien comprendre .
    tu peux afficher ta page xhtml !

  5. #5
    Membre à l'essai
    Femme Profil pro
    Développeur Java
    Inscrit en
    Février 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 45
    Points : 23
    Points
    23
    Par défaut
    Dans le code xhtml il n'y a pas grande chose, juste le display du résultat du traitement du fichier. Le tout est dans le code java.
    Je résume en version simple mon code.

    - Partie java:
    J'ai un bean qui interface avec du xhtml, il doit récupérer le pathname (le chemin du répertoire que précise l'utilisateur), et puis il ouvre un fichier se trouvant dans ce répertoire, ensuite il lit et n'affiche que certaines données (la partie traitement je met en commentaire car c'est juste pour illustrer le fonctionnement). La liste des données à afficher est retournée au xhtml pour afficher dans une dataTable (ici j'ai mis une liste de Integer).

    - Partie xhtml:
    Une dataTable de richFaces pour itérer ma liste d'Integer et ....
    La fameuse chose que je cherche .... un input du chemin que l'uti doit rentrer.
    J'ai mis là une input text que l'utilisateur doit taper à la mano !!! Pas top.
    (Et c'est juste cette ligne en rouge là que je veux changer).
    J'aimerais qu'il puisse faire "Parcourir "... (mais à priori tout le monde me dit que ce n'est pas possible de faire ça à cause des problèmes de sécurité.


    public class myFileBean {
    private String pathName = null;

    public void setPathName(String pathName) {
    this.pathName = pathName;
    }

    public String getPathName(){
    return this.pathName;
    }

    // Data loaded from the file that the name is given by the user
    private List<Integer> myData = null

    public List<Integer> getMyData() {
    myFile toto = new myFile(this.pathName);
    myData = toto.load();
    return myData;
    }
    }

    public class myFile extends File {
    private String pathName = null;

    public myFile(String arg0) {
    super(arg0);
    this.setPathName(arg0);
    }

    public List<Integer> load() throws Exception {
    File fd = new File(this.pathName+"the name");
    if (!fd.exists()) {
    logger.error("file doesn't exist : "+ this.pathName);
    return;
    }

    try {
    this.in = new BufferedInputStream(new FileInputStream(this.pathName));
    } catch (IOException e1) {
    e1.printStackTrace();
    }

    /* .... load the file and fill the List<Integer>
    List<Integer> myDataList = new ArrayList<Integer>();
    Integer myInteger <- this.in.read(....);
    myDataList.add (myInteger);
    */
    }
    }


    <?xml version='1.0' encoding='UTF-8' ?>
    <ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:c="http://java.sun.com/jstl/core"
    xmlns:rich="http://richfaces.org/rich"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:h="http://java.sun.com/jsf/html"
    template="/templates/template.xhtml">

    <ui:define name="body">
    <h:form id="body">
    <rich:tabPanel width="100%">
    <rich:tab label="#myFileBean.pathName}" width="100%">
    <h:panelGrid id="toto" columns="3" styleClass="gridPathName" columnClasses="gridPathNamecolumn">
    <h:outputText value="Name:" />
    <h:inputText value="#{myFileBean.pathName}" />
    <a4j:commandButton value="Open File" reRender="out" />
    </h:panelGrid>
    <h:panelGrid columns="2">
    <rich:dataTable id="out" columnClasses="top"
    bodyClass="inpanelBody" value="#{myFileBean.myData}" var="data">
    <rich:column label="index">
    <f:facet name="header">
    <h:outputText value="index" />
    </f:facet>
    <h:outputText value="#{data}" />
    </rich:column>
    </rich:dataTable>
    </h:panelGrid>
    </rich:tab>
    </rich:tabPanel>
    </h:form>
    </ui:define>
    </ui:composition>

  6. #6
    Membre à l'essai
    Femme Profil pro
    Développeur Java
    Inscrit en
    Février 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 45
    Points : 23
    Points
    23
    Par défaut
    En fait j'ajoute une explication : ce n'est pas vraiment une application web à proprement parler. C'est une application java qui offre une interface web pour les accès à distance, l'avantage c'est qu'on installe une seule fois sur le serveur de traitement et les utilisateurs peuvent accéder de n'importe où à travers le web.

  7. #7
    Membre régulier Avatar de yacine.dev
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Points : 88
    Points
    88
    Par défaut
    tu peux m'expliquer l'architecture de votre application et les technologies utilisées.

  8. #8
    Membre à l'essai
    Femme Profil pro
    Développeur Java
    Inscrit en
    Février 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 45
    Points : 23
    Points
    23
    Par défaut
    Eventuellement en grande ligne mais je ne vois pas le rapport avec ma question.

    C'est une appli java pure qui traite les fichiers de données et les affiches. L'utilisateur précise l'emplacement des fichiers, l'appli les mouline et les données sous un format prédéfini.

    On peut comparer à une consultation de base de données où l'utilisateur a juste à ouvrir la base en précisant le path, et ensuite il consulte les données sous tous les angles.

    Normalement on peut faire une interface avec Swing, ce qui veut dire que l'utilisateur doit être sur le serveur lui même. Avec l'interface web, l'utilisateur peut intéragir à distance, .... sur son pc, depuis son laptop, ou à l'autre bout du monde, et plusieurs utilisateurs peuvent accéder en même temps.

    Voilà ... et la solution à ma question .... ?

    Ah oui les technos:

    Java + Bean JSP et composants RichFaces comme dans l'exemple. Les beans font appels aux traitements java pur.

  9. #9
    Membre régulier Avatar de yacine.dev
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Points : 88
    Points
    88
    Par défaut path de fichier choisi
    voiçi une page html danslaquelle inputFile dés que tu choisis le fichier il t'affiche le path,esseye.

    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
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Page</title>
            <script type="text/javascript">
            
            function affichePath(){
    
          alert(document.getElementById('photo').value);
            }
            </script>
        </head>
        <body>
            <form  method="post" enctype="multipart/form-data" name="form1" action="page4.jsp">
              <table width="386" border="1">
                <tr>
                  <td width="120">photo : </td>
                  <td width="250"><input  type="file" name="photo"   onclick="affichePath();"></td>
                </tr>
                
                  
                
               
        </table>
        </form>
            <h2>&nbsp;</h2>
        </body>
    </html>
    avec la methode javascript affichePath() défini dans le head de la page j'ai affiché la valeur de l'objet photo (c'est le input file avec le name photo) le path de fichier (cest la valeur de l'input),donc tu peux récupérer le path pour faire des traitement.

  10. #10
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    Juste une petite interrogation.
    Les fichiers que tu dois traiter sont sur le serveur ou sur la machine locale?

  11. #11
    Membre à l'essai
    Femme Profil pro
    Développeur Java
    Inscrit en
    Février 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 45
    Points : 23
    Points
    23
    Par défaut
    Plusieurs choses ...

    1 - Pour yacine.dev:

    Le code que tu proposes marche ... mais seulement avec Internet Explorer. FireFox ne retourne pas le path, mais seulement le nom du fichier. Et là comme déjà signalé dans plusieurs post, c'est un problème de sécurité !!!
    Ensuite j'ai du mal à le récupérer dans mon code java ... mais je crois que je peux user en passant par l'écriture dans d'un champ input intermédiaire.


    2 - Pour len1sensibl:

    Effectivement je me rends compte en même temps que mes fichiers sont sur le serveur ... donc "Parcourir" sur le poste du client ne sert à rien ....!!!

    Donc je crois que les utilisateurs n'ont pas trop de choix à taper le chemin à la mano. Merci en tout cas de votre aide.

  12. #12
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    J'ai exactement le même problème que toi en fait.
    Je voulais creer un fichier a partir de données de ma base et ouvrir une fenêtre parcourir pour choisir le chemin.
    Les file upload ne le permette pas sur le serveur, et je ne trouve pas de fileDownload ou un composant du genre donc avec les mains comme à l'ancienne.

    Sinon ce que je pensait faire est avec un bouton ouvrir un rich:modalPanel dans lequel je permet définir le chemin mais juste un morceau.
    Par exemple il sera bloqué sur C:\temp\test\ et l'utilisateur peut définir le nom du fichier.
    et bien évidemment je lui met un joli message pour dire que le fichier sera disponible à cette adresse sur le serveur.

    Voila pour l'idée.

  13. #13
    Membre à l'essai
    Femme Profil pro
    Développeur Java
    Inscrit en
    Février 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 45
    Points : 23
    Points
    23
    Par défaut
    Oui je pense en fait aussi ouvrir un modalPanel, mais à l'inverse de toi je connais les noms de mes fichiers (les noms sont toujours les mêmes, ce sont les noms des tables de la base).

    L'utilisateur doit rentrer le path et là ... éventuellement je peux afficher une liste de choix de path que l'utilisateur a rentré dans un fichier de configuration ... !

  14. #14
    Membre régulier Avatar de yacine.dev
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Points : 88
    Points
    88
    Par défaut
    voiçi avec le code java il t'affichele path absolute je l'ai testé avec eclipse ça marche teste avec les autres

    page d'affichage de path
    avec le non affichepath.jsp
    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
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
    
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
             <%@ page import="org.apache.commons.fileupload.*,org.apache.commons.fileupload.DiskFileUpload,java.util.List,org.apache.commons.fileupload.disk.*,org.apache.commons.fileupload.servlet.*,java.util.*,java.io.*,java.io.InputStream" %>
            <% 
            // 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);
    
    // Process the uploaded items
    Iterator iter = items.iterator();
    while (iter.hasNext()) {
        FileItem item = (FileItem) iter.next();%>
    <%
             
           File fullFile = new File(item.getName());
           String nom=fullFile.getName();
          %>
          <%=fullFile.getAbsolutePath()%> 
           <%
    }
            %>
        </body>
    </html>
    page jsp de file uplode
    avec un non de votre choix
    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
     
     
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
     
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
            <script type="text/javascript">
            
     </script>
        </head>
        <body>
            <form  method="post" enctype="multipart/form-data" name="form1" action="affichepath.jsp">
            <table width="386" border="1">
            <tr>
                  <td width="120">photo : </td>
                  <td width="250"><input  type="file" name="photo" ></td>
                </tr>
     
                <tr>
                  <td><input type="submit"></td>
                  <td>&nbsp;</td>
                </tr>
        </table>
        </form>
            <h2>&nbsp;</h2>
        </body>
    </html>
    tu dois lancer la deuxieme page il vous affiche un fileuplode tu choisi apres une page jsp(c'est la premiere ) se charge surlaquelle affiché le path absolu ,donc esseye avec les autres nav.

  15. #15
    Membre régulier Avatar de yacine.dev
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Points : 88
    Points
    88
    Par défaut recupérer le path absolu de fichier charché avec file uplode avec jsp
    heureux pour toi ça marche bien avec chrome donc je pense avec le reste

    ma premiére réponse etait dans le bon chemin il sufirait que tu cherche un peu
    je t'ai donné les classes java qui vont t'aider donc il faut que tu cherche les attributs içi il faut
    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
     
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
     
    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);
    //items contient les files choisi
     
    Iterator iter = items.iterator();
    while (iter.hasNext()) {
        FileItem item = (FileItem) iter.next();
    //item.getName()=le nom de  file chargé
           File fullFile = new File(item.getName());
           String nom=fullFile.getName();
           %>
    //fullFile est le file chargé on l'a récupéré puis on récupére son path fullFile.getAbsolutePath()
     
          <%=fullFile.getAbsolutePath()%> 
           <%
    }
            %>
    moi aussi je suis comme toi je connaissais a quoi ça sert ce code mais je savais po comment l'expliquer ,j'ai bien cherché (casse tete) maintenant voiçi l'expliquation on récupére les fichiers chargé dans l'items puis on récupére son path absolu (le trésor que tu cherches hhhh)

  16. #16
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 5
    Points : 9
    Points
    9
    Par défaut
    salut,

    j'ai vu comment on peut afficher le path mais j'ai pas compris comment je pourrais au lieu de l'afficher le récupérer dans mon bean !! quelqu'un pourrait m'aider
    merci d'avance

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/11/2014, 22h38
  2. Comment récupérer le path d'un fichier
    Par nhunhu dans le forum Développement Web en Java
    Réponses: 5
    Dernier message: 12/02/2010, 14h29
  3. [debutant][Fichier] Comment obtenir le path de mon fichier ?
    Par Soulsurfer dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 22/06/2004, 17h09

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