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

Struts 1 Java Discussion :

[fileupload] problème pour parser la requete


Sujet :

Struts 1 Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2003
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 49
    Points : 32
    Points
    32
    Par défaut [fileupload] problème pour parser la requete
    salut tous,

    voilà j'ai un petit problème pour uploader un fichier depuis une jsp. j'utilise struts et le fileupload d'apache.

    j'ai l'impression que l'appel a cette methode ne fonctionne pas (ou alors je n'ai pas compris ce que ça devait faire) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List items = upload.parseRequest(request, upload.getSizeThreshold(), upload.getSizeMax(), upload.getRepositoryPath());
    ou upload est un DiskFileUpload.

    le souci est que items reste vide meme si j'ai bien un fichier contenu dans la requete... (j'ai vérifié avec le debogueur)

    si quelqu'un a une idée... ou une alternative a proposer ;-)

    merci a +
    guyom

    ps : pour écrire le code d'upload j'ai suivi a la lettre les indication sur cette page : http://jakarta.apache.org/commons/fileupload/using.html

  2. #2
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    377
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 377
    Points : 356
    Points
    356
    Par défaut
    Je te propose les classes FormFile de Struts ...
    çà marche nickel.
    A+

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2003
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 49
    Points : 32
    Points
    32
    Par défaut
    et bien j'arrive en effet a récupérer un FormFile sans problème : c'est d'ailleur grace a ça que j'ai pu voir que mon fichier passait bien dans ma requete. sauf qu'une fois que j'ai récupéré mon FormFile j'en fait quoi?

  4. #4
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    377
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 377
    Points : 356
    Points
    356
    Par défaut
    Comment çà tu en fait quoi ??
    Qu'est ce que tu veux en faire ?
    Tu as toute les méthodes qu'il te faut après !!!

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2003
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 49
    Points : 32
    Points
    32
    Par défaut
    ben je récupère un objet FormFile depuis mon beanform qui possède un attribut de type FormFile ; mais mon fichier n'est pas physiquement sur le disque a ce moment là? je dois bien le stocker dans un répertoire non?

  6. #6
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    377
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 377
    Points : 356
    Points
    356
    Par défaut
    Oui et dans ton objet FormFile tu as tout ce qu'il faut pour le faire.
    getFileData(), ou getFileInputStream() quelquechose comme çà.
    Après tu écris ton fichier comme d'habitude...

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mai 2003
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 49
    Points : 32
    Points
    32
    Par défaut
    ok merci.

    Après tu écris ton fichier comme d'habitude...
    en fait c'est peut etre parce que d'habitude j'écrit pas d'fichier. bon j'vais voir ce que tu m'a dis je devrais m'en sortir. ;-)
    merci encore a +

  8. #8
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    377
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 377
    Points : 356
    Points
    356
    Par défaut
    Ok d'accord je t'aide alors....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    InputStream in = tonFormFile.getInputStream();
    BufferedInputStream bin = new BufferedInputStream(in);
    FileOutputStream fout = new FileOutputStream(tonFormFile.getFileName());
    BufferedOutputStream bout = new BufferedOutputStream(fout);
     
    byte[] b = new byte[in.available()];
    while( (in.read(b))!=-1){
       bout.write(b,0, b.length);
    }
    bout.flush();
    fout.close();
    in.close();
    Voilà désolé, pour le 'comme d'habitude', je pensais que tu savais faire ;-)
    En tout cas voilà le préjudice est réparé.

    Pense à mettre Résolu.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mai 2003
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 49
    Points : 32
    Points
    32
    Par défaut
    ok. toi par contre t'as l'air d'avoir l'habitude! bon alors j'en profite pour te poser une derniere question ;-) : dans quel répertoire il va mon fichier? ça peut se paramétrer ça?

    merci

  10. #10
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    377
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 377
    Points : 356
    Points
    356
    Par défaut
    Bah ecoute, là c toi qui décide où tu dois le placer.
    Soit tu créé un répertoire par user si çà dépend des users.
    Soit tu créé un répertoire temporaire, mais à ce moment là il faut que tu fasses attention aux accès concurrents.
    Et si tu veux pouvoir y accéder après depuis ton site web, il faut que tu le créé dans un répertoire de ton application.
    Ce que je te conseille, c'est de te créer un répertoire upload (ou temp), et ensuite tu fais une création de répertoire dans le dernier avec le nom de la session ( session.getId() )propre à la requete (session = request.getSession() ).
    Et tu places fon fichier où tu veux en ajoutant ton passe dans la ligne suivante :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String monPath = "/tomcat/webapps/monappli/upload/sessiontotoid/";
    FileOutputStream fout = new FileOutputStream(monPath + tonFormFile.getFileName()); // le paramètre FileOutputStream correspond au nom de fichier à écrire.
    Voili, voilou,
    8)

  11. #11
    Nouveau membre du Club
    Inscrit en
    Mai 2003
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 49
    Points : 32
    Points
    32
    Par défaut
    ok merci pour tout
    a +

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    J'ai bien lu tout ce thread mais mon problème se trouve bien avant l'écriture du fichier...

    Dans mon formulaire Struts j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private FormFile file;
     
    /**
      * @return Renvoie file.
      */
     public FormFile getFile() {
      return file;
     }
     /**
      * @param file file à définir.
      */
     public void setFile(FormFile file) {
      this.file = file;
     }
    Dans ma JSP j'ai un champ (de test) comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <tr>
    <td><html:file property="file"/></td>
    </tr>
    
    Enfin dans ma classe action j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FormFile file = maForm.getFile();
    En fait j'ai un souci lorsque je submit mon formulaire après l'avoir renseigné, j'ai une erreur qui sort mais son message ne laisse pas vraiment savoir d'où vient l'erreur ("java.lang.IllegalArgumentException: argument type mismatch") :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    exception javax.servlet.ServletException: BeanUtils.populate    org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1254)    org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821)    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)    org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)    javax.servlet.http.HttpServlet.service(HttpServlet.java:709)    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
     
    cause mère java.lang.IllegalArgumentException: argument type mismatch    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)    java.lang.reflect.Method.invoke(Unknown Source)    org.apache.commons.beanutils.PropertyUtils.setSimpleProperty(PropertyUtils.java:1789)    org.apache.commons.beanutils.PropertyUtils.setNestedProperty(PropertyUtils.java:1684)    org.apache.commons.beanutils.PropertyUtils.setProperty(PropertyUtils.java:1713)    org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:1019)    org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:808)    org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1252)    org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821)    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)    org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)    javax.servlet.http.HttpServlet.service(HttpServlet.java:709)    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    J'ai l'impression que ma property FormFile ne peut pas être associée au champ "html:file" de ma JSP étant donné que le populate() pose pb...

    Je cherche depuis le début de l'aprem mais je ne parviens pas à trouver une réponse à ce souci...

    Si vous avez des questions qui permettraient de vous aider à mieux comprendre mon problème, n'hésitez pas.

    Merci d'avance.

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Octobre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut LA REPONSE !
    après de bonnes heures de recherche, j'ai trouvé la solution (en gras) :

    <html:form action="/productIconInitEdit" enctype="multipart/form-data">

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

Discussions similaires

  1. [JDOM] Problème pour parser un fichier XML [débutant]
    Par adn013 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 16/05/2007, 12h00
  2. Problème pour écrire des requetes mysql complexes
    Par truemistress dans le forum Requêtes
    Réponses: 8
    Dernier message: 08/02/2007, 18h29
  3. [POO] Problème pour Parser une page XML
    Par Death83 dans le forum Langage
    Réponses: 18
    Dernier message: 29/08/2006, 10h15
  4. problème pour parser un fichier xml avec XML::Simple
    Par black_code dans le forum Modules
    Réponses: 3
    Dernier message: 30/01/2006, 19h32
  5. [SQL] problème pour faire ma requete
    Par seb.briet dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/12/2004, 16h51

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