Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1046 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  JSP vs PHP : file upload

 

 

 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

JSP vs PHP : file upload

n°635997
benou
Posté le 09-02-2004 à 14:23:43  profilanswer
 

continuation de la la discute du topic copier/coller
 

Mara's dad a écrit :

C'est vrai que j'ai gardé des habitudes de PHP.
Quand c'est des bonnes habitudes, je suis un peu déçu de pas retrouver un truc equivalent dans J2EE.
Je ne vois pas trop pourquoi le programmeur doit se taper la décomposition de la requête reçue par le client c'est tout.
Ce que je veux est simple :
Le client envoie une requête HTTP:
L'HttpServletRequest propose une collection (ou plusieurs) qui contient tous les élément reçus, quelle que soit la méthode, histoire que le programmeur ne soit pas obligé d'aller fouiller dans 15 APIs pour retrouver ses petits.
En PHP, quelle que soit la requête reçue, tu as les collections suivantes :
$_GET
$_POST
$_SESSION
$_COOKIES
$_FILES
Que ton formulaire mélange GET et POST ou qu'il soit en "multipart/form-data", t'as pas à te poser la question. Et c'est pas plus mal, vu que tu as rarement (voire jamais) la nécessité de gérer ce genre de choses.
Pour les Fichiers uploadés, tout ce que t'as à faire, c'est les déplacer à leurs place définitive. Si tu ne le fais pas, ils sont automatiquement supprimés à la fin du script.
Bref, gérer un upload de fichier se fait en 2 lignes en PHP alors qu'avec java, ben j'essaye même pas de compter...
M'enfin, c'est du passé, j'ai plus le problème maintenant :D
 


 
je vois pas le lien avec get ou post, mais si tu veux faire pareil en java dans une servlet, tu as juste à surcharger la méthode service à la place de doGet ou doPost.
Si tu fais des JSP, c'est comme en PHP : tu t'en fous.
 
ensuite pour récupérer les fichiers en java ca prend 2 lignes aussi :  

Code :
  1. DiskFileUpload upload = new DiskFileUpload();
  2. List files = upload.parseRequest(request);


 
vraiment, je vois pas la difficulté ... C'est juste que PHP gère le fileupload en standard alors que java considère que c'est un extension (ce qui est vrai).


---------------
ma vie, mon oeuvre - HomePlayer
mood
Publicité
Posté le 09-02-2004 à 14:23:43  profilanswer
 

n°636023
Mara's dad
Yes I can !
Posté le 09-02-2004 à 14:35:24  profilanswer
 

1- Tu oublie le try / catch
2- Tu oublie de tester si le fichier est sur disque ou en mémoire pour l'écrire ailleur.
3- Tu oublie d'écrire le fichier ailleur
 
Et si par malheur tu as aussi un champs text, ben il sera pas accessible par getParameter...
Pourquoi ?
 
PS : On recommence la discussion depuis le début c'est ça ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°636141
benou
Posté le 09-02-2004 à 16:15:41  profilanswer
 

Mara's dad a écrit :

1- Tu oublie le try / catch
2- Tu oublie de tester si le fichier est sur disque ou en mémoire pour l'écrire ailleur.
3- Tu oublie d'écrire le fichier ailleur
 
Et si par malheur tu as aussi un champs text, ben il sera pas accessible par getParameter...
Pourquoi ?
 
PS : On recommence la discussion depuis le début c'est ça ?


1/ si t'es dans une jsp pas besoin :o
2/ pas bien compris ...
3/ Tu peux utiliser la méthode parseRequest du DiskFileUpload :
upload.parseRequest(request, yourMaxMemorySize, yourMaxRequestSize, yourTempDirectory);
 
Après c'est de la config fine en fonction de ce que tu veux en faire du fichier que tu reçois ... Pour ca faut configurer le DiskFileUpload, ca prendra quelques lignes de plus mais tu ne le feras qu'une fois par appli...


---------------
ma vie, mon oeuvre - HomePlayer
n°636232
Mara's dad
Yes I can !
Posté le 09-02-2004 à 17:11:33  profilanswer
 

1- J'ai pas le droit de faire du java dans les JSP...
2- DefaultFileItem.isInMemory()
3- Je voulais parler de copier le fichier à sa destination finale.
Bref on est loin des 2 lignes.
Mais c'est bon là, ma méthode fonctionne, je trouve ça chiant c'est tout !
 
Bon çà donne :

Code :
  1. public static HashMap getParamsAndFilesFromRequest( HttpServletRequest request ) {
  2. final String MULTIPART = "multipart/form-data";
  3. // New disk fileUploadObject  
  4.     DiskFileUpload dFiles = new DiskFileUpload();
  5.     // Array of files from request
  6.     ArrayList filesItems = null;
  7.     // A file item
  8. DefaultFileItem fileItem;
  9. // Returned hMap
  10. HashMap htMap = new HashMap();
  11. // Count the number of uploaded files  
  12. int nNbItems = 0;
  13. // Parameter name
  14. String paramName;
  15. // Params from getParameterNames
  16. Enumeration paramNames;
  17. // MULTIPART request
  18. if( request.getContentType() != null && request.getContentType().startsWith( MULTIPART ) )
  19. {
  20.  // Get an array with all the fileItems in the request
  21.  try
  22.  {
  23.   filesItems = (ArrayList) dFiles.parseRequest( request );
  24.  }
  25.  catch( FileUploadException e )
  26.  {
  27.   MsgLogService.log( 10000, MsgLogService.strLuteceModuleName, "L'upload du fichier a généré l'erreur:" + e );
  28.   return htMap;
  29.  }
  30.  // Count files
  31.  nNbItems = filesItems.size();
  32.  if( nNbItems == 0 )
  33.  {
  34.   throw new IllegalArgumentException( "Error uploading File: No file found in request" );
  35.  }
  36.  //For each field, we return the pairs key/values in HashMap
  37.  for( int i = 0; i < nNbItems; i++)
  38.  {
  39.   fileItem = (DefaultFileItem)filesItems.get( i );
  40.   if( fileItem.isFormField() )
  41.   {
  42.    htMap.put( fileItem.getFieldName(), fileItem.getString() );
  43.   }
  44.   else
  45.   {
  46.    // If in memory, write the file to disk.
  47.    if( fileItem.isInMemory() )
  48.    {
  49.     writeFileOnDisk( fileItem, fileItem.getStoreLocation().getAbsolutePath() );
  50.    }
  51.    htMap.put( fileItem.getFieldName(), fileItem );
  52.   }
  53.  }
  54. }
  55. // Standard request
  56. else
  57. {
  58.  paramNames = request.getParameterNames();
  59.  while( paramNames.hasMoreElements() )
  60.  {
  61.   paramName = (String)paramNames.nextElement();
  62.   htMap.put( paramName, request.getParameter( paramName ) );
  63.  }
  64. }
  65. return htMap;
  66. }


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°636257
the real m​oins moins
Posté le 09-02-2004 à 17:35:47  profilanswer
 

d'un autre côté en programmant un peu objet, tu serais pas obligé de taper l'appel à ton truc à chaque fois, contrairement à du php :ange:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°636282
Mara's dad
Yes I can !
Posté le 09-02-2004 à 18:13:17  profilanswer
 

C'est le cas :D
Cette méthode est appelée automatiquement dans la classe générique ActionBean dont hérite toutes les classes de la couche de présentation.
Dans cette dernière, je n'ai qu'à faire :
String strMonPraram = getParameter( "StringParamName" );
et
DefaultFileItem dfiBackground = getFileItem( "FileUploadParamName" );
 
Un peu comme en PHP quoi :D


Message édité par Mara's dad le 09-02-2004 à 18:13:56

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°636285
benou
Posté le 09-02-2004 à 18:17:56  profilanswer
 

je comprend pas bien ... tout le traitement que tu fais c'est ce que fait le DiskFileUpload ...
 
ex d'utilisation unitaire :  
 

Code :
  1. public void doGet(HttpServletRequest request, HttpServletResponse) {
  2. //...
  3.    DiskFileUpload upload = new DiskFileUpload();
  4.    upload.parseRequest(req, 0, 1024*1024*2, "c:\web\incoming" );
  5. //...
  6. }


La seule différence que je vois c'est que ton code met les fichiers uploadés dans une map alors que le parseRequest les file dans une List ...
 
 
Ensuite dans la requête, libre à toi d'appeler le parseRequest si tu attend un upload de fichier ou alors de manipuler l'objet request normalement (getParameter) pour récupérer les parametres


---------------
ma vie, mon oeuvre - HomePlayer
n°636765
Mara's dad
Yes I can !
Posté le 10-02-2004 à 01:38:46  profilanswer
 

Je vais voir ça demain...
Il est en effet tout a fait possible que je soit passé à coté de quelque chose si je comprend bien ce que tu écris :sweat:


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°636895
benou
Posté le 10-02-2004 à 08:45:09  profilanswer
 

juste une remarque aussi : ton code va planté si dans une requête tu as 2 paramêtre du même nom (valeur multiple). Dans ce cas il faut appeler getParameterValues(String) qui retourne un tableau de String (les valeurs) plutot que getParameter(String) qui retourne juste la 1ere valeur.
Tu as aussi la méthode getParameterMap() qui fait exactement ce que fait la fin de ton code ...


---------------
ma vie, mon oeuvre - HomePlayer
n°636899
benou
Posté le 10-02-2004 à 08:51:36  profilanswer
 

Mara's dad a écrit :


Il est en effet tout a fait possible que je soit passé à coté de quelque chose si je comprend bien ce que tu écris :sweat:  


en fait j'ai l'impresion que tu as utilisé l'objet DiskFileUpload comme l'objet FileUpload :/  
Le DiskFileUpload ajoute justement tout le mécanisme de sauvegarde disque des fichiers uploadés ...


---------------
ma vie, mon oeuvre - HomePlayer
mood
Publicité
Posté le 10-02-2004 à 08:51:36  profilanswer
 

n°636908
Mara's dad
Yes I can !
Posté le 10-02-2004 à 09:19:56  profilanswer
 

Ok, je savais bien que je devait en parler à un connaisseur :D
M'enfin, c'est quand même loin d'être simple et clairement expliqué dans les docs, non ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°636925
benou
Posté le 10-02-2004 à 09:50:12  profilanswer
 

Mara's dad a écrit :

Ok, je savais bien que je devait en parler à un connaisseur :D
M'enfin, c'est quand même loin d'être simple et clairement expliqué dans les docs, non ?


ben perso je connaissais pas cette API et j'ai compris rapidement ...
et c'est assez bien expliqué sur leur site : http://jakarta.apache.org/commons/ [...] using.html
 
Mais bon, c'est pas de ta faute : t'as été martirisé par du PHP quand tu étais petit ;)


---------------
ma vie, mon oeuvre - HomePlayer
n°637004
Mara's dad
Yes I can !
Posté le 10-02-2004 à 11:03:58  profilanswer
 

Ce que j'ai lu n'est pas très éloigné de ce que j'ai fais il me semble...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°637052
benou
Posté le 10-02-2004 à 11:19:18  profilanswer
 

Mara's dad a écrit :

Ce que j'ai lu n'est pas très éloigné de ce que j'ai fais il me semble...


Non mais sur la fin, le code qu'ils montrent c'est si tu veux gérer les choses à la main, genre copier le fichier dans des répertoires différents, chnager le nom, etc ...
 
D'après ce que j'ai vu de ton code, ce que tu fais ne va pas plus loin que ce que fait le DiskFileUpload ...


---------------
ma vie, mon oeuvre - HomePlayer
n°637146
Mara's dad
Yes I can !
Posté le 10-02-2004 à 11:54:12  profilanswer
 

Bon, on reprend depuis le début, c'est à dire mes besoins :
 
1- Dans les classes de traitements, je ne veux pas me poser la question du format de la requête HTTP.
2- J'ai besoin d'une méthode simple qui me retourne la valeur d'un champ de formulaire en fournissant son nom.
3- J'ai besoin d'une méthode simple qui me retourne un DefaultFileItem d'un champ de formulaire de type file en fournissant son nom.
 
Donc il faut :
1- Que je parse la requête avec la bonne méthode suivant son content type.
2- Que les paramettres de la requête, une fois cette dernière parsée, soient dans une HahsMap et non une simple liste, si je veux pourvoir y accéder directement par leurs noms.
 
Reste le problème des multivalués que je n'ai pas abordé pour le moment.
Toutefois, j'entrevoie un problème ( que je n'avais pas en PHP :D ) :
Par exemple, sur un <select multiple...> on se dit que ce serait sympa de récupérer une collection. Mais que se passera-t-il si l'utilisateur ne sélectionne qu'une seule option ?
Le même formulaire donnera quelque-fois un String, et d'autres fois une Collection de Strings... Pas impossible à gérer, mais pas cool :/


Message édité par Mara's dad le 10-02-2004 à 11:54:30

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°637151
El_gringo
Posté le 10-02-2004 à 11:58:36  profilanswer
 

Mara's dad a écrit :


Par exemple, sur un <select multiple...> on se dit que ce serait sympa de récupérer une collection. Mais que se passera-t-il si l'utilisateur ne sélectionne qu'une seule option ?
Le même formulaire donnera quelque-fois un String, et d'autres fois une Collection de Strings... Pas impossible à gérer, mais pas cool :/


 
Ben non. Si tu fais un getParameters tu récuèreras un tableau de String dans tous les cas. S'il n'y a qu'une seule fois le paramètre dans la requète, ton tableau sera de longueur 1, c'est tout.


---------------
Les Vers Solitaires, on aime ... ou pas !
n°637182
Mara's dad
Yes I can !
Posté le 10-02-2004 à 12:21:00  profilanswer
 

Ok, je te crois. J'ai pas essayé, mais je ne peux m'empécher de me demander : comment fait le parser pour savoir qu'il doit créer un tableau quand une seule valeur est envoyée ?
D'après mes expériences d'annalyse de requete HTTP, je ne vois pas bien comment c'est possible...
Quand la requête envoie :
TOTO=0&TOTO=4&TOTO=7&ACTION=GO
Je devine comment fait le parser pour décider que TOTO est un multivalué, mais s'il n'y a qu'une seule valeur ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°637185
the real m​oins moins
Posté le 10-02-2004 à 12:23:18  profilanswer
 

en interne, c'est une hashmap qui est stockée, qui associe de clé-String a des values-String[]
 
qd tu fais un getParameter(String s) ça te renvoie en fait map.get(s)[0]
 
[:spamafote]
c quoi la question? [:everything4free]


Message édité par the real moins moins le 10-02-2004 à 12:23:48

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°637188
El_gringo
Posté le 10-02-2004 à 12:25:49  profilanswer
 

Mara's dad a écrit :

Ok, je te crois. J'ai pas essayé, mais je ne peux m'empécher de me demander : comment fait le parser pour savoir qu'il doit créer un tableau quand une seule valeur est envoyée ?
D'après mes expériences d'annalyse de requete HTTP, je ne vois pas bien comment c'est possible...
Quand la requête envoie :
TOTO=0&TOTO=4&TOTO=7&ACTION=GO
Je devine comment fait le parser pour décider que TOTO est un multivalué, mais s'il n'y a qu'une seule valeur ?


 
De toute façon, la méthode est typée (comme tout en Java). Elle te rend un tableau de String, et pas autre chose. ça tu peux en être sur. Après, comment elle se démerde derrière, c'est pas franchemetn ton problème!


---------------
Les Vers Solitaires, on aime ... ou pas !
n°637198
Mara's dad
Yes I can !
Posté le 10-02-2004 à 12:33:17  profilanswer
 

Ok, j'avais mal lu :D (getParameters au lieu de getParameter)...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°637217
Mara's dad
Yes I can !
Posté le 10-02-2004 à 12:52:00  profilanswer
 

the real moins moins a écrit :

en interne, c'est une hashmap qui est stockée, qui associe de clé-String a des values-String[]
 
qd tu fais un getParameter(String s) ça te renvoie en fait map.get(s)[0]
 
[:spamafote]
c quoi la question? [:everything4free]


 
Putain, mais quel bouley ce Dad !
 
Ok, j'ai un formulaire en "multipart/form-data".
Ce formulaire envoie aussi bien des fichiers que des champs normaux. Par exemple un <input type="texte" name="TOTO" value="test">
 
Donc coté java :

Code :
  1. // Cas du multipart :
  2. if( FileUpload.isMultipartContent(request) )
  3. {
  4. // Création d'un gestionnaire de file-upload
  5. DiskFileUpload upload = new DiskFileUpload();
  6. // Parse de la requête
  7. List items = upload.parseRequest(request);
  8. // A partir de là, j'ai une liste et pas une HasMap.
  9. String param = request.getParameter( "TOTO" );
  10. }


Et bien sûr param == null !
 
Est-ce que vous commencez à comprendre mon problème, ou est-ce que je suis un irreductible bouley ( pas impossible ça... )


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°637223
benou
Posté le 10-02-2004 à 12:58:01  profilanswer
 

nan mais je comprend bien ... tu veux une map à la place d'une List ... et là c'est clair que t'as pas le choix, il faut que tu te la créé à la mano.  
 
(remarque, je pense pas que le request.getParameter fonctionne dans le cas d'une requete multipart. Faut surement récupérer les paramêtres dans la List comme c'est indiqué sur le site)


---------------
ma vie, mon oeuvre - HomePlayer
n°637224
the real m​oins moins
Posté le 10-02-2004 à 13:00:05  profilanswer
 

comme dit benou, sauf que j'espere qu'il y moyen de recuperer qqchose comme une "MultiPartHttpServletRequest", qui implemente la meme interface que ServletRequest ! (c'est le cas avec le truc d'oreilly que j'avais mentionné)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°637227
benou
Posté le 10-02-2004 à 13:02:56  profilanswer
 

the real moins moins a écrit :

comme dit benou, sauf que j'espere qu'il y moyen de recuperer qqchose comme une "MultiPartHttpServletRequest", qui implemente la meme interface que ServletRequest ! (c'est le cas avec le truc d'oreilly que j'avais mentionné)


pas dans le truc d'apache ...
mais ca se fait en 2 coups de cuillères à pot. (amis des proverbes à la con :jap: )


---------------
ma vie, mon oeuvre - HomePlayer
n°637247
Mara's dad
Yes I can !
Posté le 10-02-2004 à 13:12:59  profilanswer
 

Ok, j'ai donc bien fait ce qu'il falait faire ( sauf utiliser le truc d'oreilly ).
A la fin de mon code, si le formulaire n'est pas "multipart", je recopie les params dans ma hasMap pour avoir un accès standard aux paramètres, indépendement du enctype du formulaire.
 
Reste les multivalués...
Le développeur sait bien sûr s'il attend un tableau ou pas. Il peut donc choisir entre getParameter ou getParameters.
Le problème, c'est que j'interviens avant le développeur, et que je n'ai pas de moyen à priori de savoir si le champs est une collection ou pas.
Une solution simple serait de traiter tous les paramètres non fichiers comme simples ET comme collections.
On aurait donc :
Une HashMap pour les fichiers.
Deux HasMap pour les paramètres. Une qui considère les paramètres comme simples,  et une autres qui les prends comme des collections.
C'est un peu du gâchi, mais çà doit marcher.
Reste à trouver l'équivalent du getParameters pour un multipart, ou regarder du coté d'oreilly...
 
Bon, je vais me sustenter, et je reviens :D


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°637251
the real m​oins moins
Posté le 10-02-2004 à 13:20:17  profilanswer
 

a mon avis dans ta hashmap tu dois uniquement stocker des String[]
et renvoyer un objet qui encapsule cette hashmap qui a 2 methodes  getParameter et getParameters. (la premiere ne renvoyant que le 1er element de l'array)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°637727
Mara's dad
Yes I can !
Posté le 10-02-2004 à 16:53:56  profilanswer
 

Arf, pas con du tout ça !
 
Autres choses à voir :
1- Si l'action d'un formulaire POST multipart contient aussi des paramètres (en GET donc), il ne faut pas les oublier. Conclusion, il faut gérer request.getParameterNames(); dans tous les cas, enfin il me semble...
 
2-Pour les multivalués dans un multipart, comme tout ce qu'on a est une List de DefaultFileItem, on est obligé de faire la détection sois même. Attention tout de même de ne pas mettre un champs de formulaire et un upload dans une collection sous prétexte qu'il ait le même nom :D
Blague à part, en fait comme tout les éléments sont des collections (ou des tableaux,...) dans les HashMaps, il suffit de rechercher dans cette dernière si on a déjà quelque-chose pour le nom. Ce qui pose un nouveau problème si quelqu'un pond une page HTML avec des params ( un en GET et un en POST "multipart" ) avec le même nom... M'enfin YAKA dire que ça n'arrivera pas :D


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°637743
the real m​oins moins
Posté le 10-02-2004 à 17:02:06  profilanswer
 

1/ pour le get, je vois pas pq tes parametres seraient gerés differement de ceux du post.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°637772
Mara's dad
Yes I can !
Posté le 10-02-2004 à 17:12:59  profilanswer
 

Je fait un test de ce que j'ai en tête, et je t'envoie le résultat (requête HTTP et ce que vois DiskFileUpload).


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°637812
Mara's dad
Yes I can !
Posté le 10-02-2004 à 17:37:45  profilanswer
 

Donc, résultat des course, j'avais raison :D
 
D'abord, le HTML :

<html>
<body>
<form action="fileupload.jsp?urlParam=bonjour" method="post" enctype="multipart/form-data">
<select name="TOTO" multiple size="10">
<option value="0">v1</option>
<option value="1">v2</option>
<option value="2">v3</option>
<option value="3">v4</option>
<option value="4">v5</option>
<option value="5">v6</option>
<option value="6">v7</option>
<option value="7">v8</option>
</select><br>
<input type="submit" name="action" value="go">
</form>
</body>
</html>


 
Ce qu'envoie le navigateur (merci FireFox 0.8 + Live HTTP Headers ) quand on sélectionne v2 et v8 dans la liste (y'a pas de file, mais c'est pas le propos...):

POST /lutece/jsp/test_local/fileupload.jsp?urlParam=bonjour HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Firefox/0.8
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://127.0.0.1:8080/lutece/jsp/test_local/multiple.html
Cookie: JSESSIONID=C021C78EF56F6967904CC35AB42294A8
Cache-Control: max-age=0
Content-Type: multipart/form-data; boundary=---------------------------41184676334
Content-Length: 323
-----------------------------41184676334
Content-Disposition: form-data; name="TOTO"
 
1
-----------------------------41184676334
Content-Disposition: form-data; name="TOTO"
 
7
-----------------------------41184676334
Content-Disposition: form-data; name="action"
 
go
-----------------------------41184676334--
 


 
Le JSP (on ne peut plus basique):
 

Code :
  1. <jsp:useBean id="x" scope="session" class="fr.paris.lutece.portal.web.TestBean" />
  2. <% response.getWriter().print( x.multiple( request ) ); %>


 
Et maitenant le code java qui traite la request :

Code :
  1. public String multiple( HttpServletRequest request )
  2. {
  3. String response = "Debut ----------------------------------- debuT<br>";
  4. //  Cas du multipart :
  5. if( FileUpload.isMultipartContent(request) )
  6. {
  7.  // Création d'un gestionnaire de file-upload
  8.  DiskFileUpload upload = new DiskFileUpload();
  9.  // Parse de la requête
  10.  try
  11.  {
  12.   List items = upload.parseRequest( request );
  13.   Iterator iter = items.iterator();
  14.   DefaultFileItem dfi;
  15.   while( iter.hasNext() )
  16.   {
  17.    dfi = (DefaultFileItem)iter.next();
  18.    response += "Param : " + dfi.getFieldName() + ", Value : " + dfi.getString() + "<br>";
  19.   }
  20.  }
  21.  catch( Exception e)
  22.  {
  23.   return e.getLocalizedMessage();
  24.  }
  25. }
  26. response += "-------------------------------------------<br>";
  27. response += "urlParam : " + request.getParameter( "urlParam" ) + "<br>";
  28. response += "Fin ----------------------------------- fiN<br>";
  29. return( response );
  30. }


 
Et enfin le résultat :

Debut ----------------------------------- debuT
Param : TOTO, Value : 1
Param : TOTO, Value : 7
Param : action, Value : go
-------------------------------------------
urlParam : bonjour
Fin ----------------------------------- fiN


 
On vois bien que ce qui est passé dans l'URL ( en GET donc ), n'est pas du tout traité par le upload.parseRequest( request ). Ce qui est tout à fait "normal" vu que c'est pas son boulot !
 
M'enfin, je tiens le bon bout, me reste plus qu'à paufiner mon parseur et les méthodes getParameter(s) d'ActionBean.
 
Merçi à tous de m'avoir supporté si longtemps, et à la prochaine pour les inévitables coups de gueule que Java ne manquera pas de me faire pousser :fou:  :o  :ange:


Message édité par Mara's dad le 10-02-2004 à 17:41:21

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°637815
the real m​oins moins
Posté le 10-02-2004 à 17:40:18  profilanswer
 

d'un autre coté, je suis pas convaincu que c'est "standard" d'avoir des parametres "en post" et "en get" sur la meme requete..


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°637827
Mara's dad
Yes I can !
Posté le 10-02-2004 à 17:45:56  profilanswer
 

Peut-être pas n'empèche que même s'il y a des chances qu'on n'utilise jamais un truc aussi crado, on ne peut pas jurer que ça ne soit jamais utilisé. Quelques fois, on est obligé d'utiliser un artifice de ce genre pour ne pas remettre en cause tout un édifice longement pensé, et ajouter au dernier moment la petite feature que veut le client.
De toute manière çà ne me coûte strictement rien de le faire donc y'a pas de raison de se priver.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°637893
benou
Posté le 10-02-2004 à 18:24:27  profilanswer
 

the real moins moins a écrit :

d'un autre coté, je suis pas convaincu que c'est "standard" d'avoir des parametres "en post" et "en get" sur la meme requete..


le http le permet donc bon ...


---------------
ma vie, mon oeuvre - HomePlayer
n°637895
the real m​oins moins
Posté le 10-02-2004 à 18:26:03  profilanswer
 

benou a écrit :


le http le permet donc bon ...

ce que je dis c'est que je suis pas sur que ce soit dans la rfc


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°637897
benou
Posté le 10-02-2004 à 18:27:28  profilanswer
 

the real moins moins a écrit :

ce que je dis c'est que je suis pas sur que ce soit dans la rfc


ouais, je suis pas allé vérifier ...  
mais si je devais parrier je dirais que c'est permis :)


---------------
ma vie, mon oeuvre - HomePlayer
n°637899
the real m​oins moins
Posté le 10-02-2004 à 18:29:42  profilanswer
 

ok [:spamafote]
d'un autre coté ça me semble vraiment louche que le machin de jakarta permette pas de recuperer un truc qui implemente ServletRequest :heink:
(y'aurait pas ça dans un autre commons-* des fois?)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°637913
benou
Posté le 10-02-2004 à 18:43:31  profilanswer
 

the real moins moins a écrit :

ok [:spamafote]
d'un autre coté ça me semble vraiment louche que le machin de jakarta permette pas de recuperer un truc qui implemente ServletRequest :heink:
(y'aurait pas ça dans un autre commons-* des fois?)


pas à ma connaissance ...


---------------
ma vie, mon oeuvre - HomePlayer
n°637978
Mara's dad
Yes I can !
Posté le 10-02-2004 à 20:15:35  profilanswer
 

Py z'ètes que des menteurs !
c'est pas getParameters mais getParameterValues !
Py encore une autre remarque : le mélange GET dans l'url et le formulaire ne marche que si le form est en POST. En GET, les params de l'url sont écrasés par ceux du formulaire...
Bref c'est quand même à éviter, ce qui n'empèche pas de gérer le cas.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°638004
benou
Posté le 10-02-2004 à 20:30:22  profilanswer
 

Mara's dad a écrit :

Py z'ètes que des menteurs !
c'est pas getParameters mais getParameterValues !


[:kiki]

benou a écrit :

juste une remarque aussi : ton code va planté si dans une requête tu as 2 paramêtre du même nom (valeur multiple). Dans ce cas il faut appeler getParameterValues(String) qui retourne un tableau de String (les valeurs) plutot que getParameter(String) qui retourne juste la 1ere valeur.
Tu as aussi la méthode getParameterMap() qui fait exactement ce que fait la fin de ton code ...


---------------
ma vie, mon oeuvre - HomePlayer
n°638013
Mara's dad
Yes I can !
Posté le 10-02-2004 à 20:33:10  profilanswer
 

Arf, je viens de le voir. C'est el_gringo ( http://forum.hardware.fr/hardwaref [...] tm#t637151 ) qui m'a enduit d'erreur, que tout le monde à repris ensuite :D
Bon, py je vous aime bien moi, c'était juste un blague hein :o


Message édité par Mara's dad le 10-02-2004 à 20:33:30

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  JSP vs PHP : file upload

 

Sujets relatifs
[PHP] Génération de page à la volée[PHP] Classer un tableau de résultats par ordre décroissant
[PHP] Maximum execution time exceeded[PHP] Arrondi d'une division...
[PHP] Parser du HTML : par où commencerBesoin d'aide pour envoi de mail par PHP
[PHP] Un commande pour rapatrier un fichier[PHP-MySQL] fonction rechercher en PHP dans la base SQL
[PHP] pb de param passé en GET non initialisé[PHP] Upload d'un fichier sous easyphp 1.7
Plus de sujets relatifs à : JSP vs PHP : file upload


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR