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

 

 

 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

JSP vs PHP : file upload

n°638013
Mara's dad
Yes I can !
Posté le 10-02-2004 à 20:33:10  profilanswer
 

Reprise du message précédent :
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 10-02-2004 à 20:33:10  profilanswer
 

n°638028
benou
Posté le 10-02-2004 à 20:38:08  profilanswer
 

Mara's dad a écrit :


Bon, py je vous aime bien moi, c'était juste un blague hein :o


je sais bien papa ;)


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

Bon, je poste mon oeuvre demain.
Vous me direz si c'est du Java ou du Kaka ;)


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

[:psychokwak]


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

Bon, voilà comment ça se présente :
 
D'abord un bean qui gère le stockage des paramètres HTTP.

Code :
  1. public class HttpParamsBean
  2. {
  3. private HashMap _parameters;
  4. public HttpParamsBean()
  5. {
  6.  _parameters = new HashMap();
  7. }
  8. public void addFile( String name, DefaultFileItem dfi )
  9. {
  10.  _parameters.put( name, dfi );
  11. }
  12. public DefaultFileItem getFileItem( String name )
  13. {
  14.  if( _parameters.containsKey( name ) )
  15.  {
  16.   return (DefaultFileItem)_parameters.get( name );
  17.  }
  18.  else
  19.  {
  20.   return null;
  21.  }
  22. }
  23. public void addString( String name, String value )
  24. {
  25.  ArrayList list;
  26.  if( _parameters.containsKey( name ) )
  27.  {
  28.   list = (ArrayList)_parameters.get( name );
  29.  }
  30.  else
  31.  {
  32.   list = new ArrayList( );
  33.   _parameters.put( name, list );
  34.  }
  35.  list.add( value );
  36. }
  37. public void addStrings( String name, String[] values )
  38. {
  39.  int i;
  40.  for( i = 0; i < values.length; i++ )
  41.  {
  42.   addString( name, values[i] );
  43.  }
  44. }
  45. public String getParameter( String name )
  46. {
  47.  if( _parameters.containsKey( name ) )
  48.  {
  49.   return (String)( (ArrayList)_parameters.get( name ) ).get( 0 );
  50.  }
  51.  else
  52.  {
  53.   return null;
  54.  }
  55. }
  56. public ArrayList getParameterValues( String name )
  57. {
  58.  if( _parameters.containsKey( name ) )
  59.  {
  60.   return (ArrayList)_parameters.get( name );
  61.  }
  62.  else
  63.  {
  64.   return null;
  65.  }
  66. }
  67. }


 
Ensuite la méthode d'une classe d'outils qui parse la requête HTTP :

Code :
  1. public static HttpParamsBean getParamsAndFilesFromRequest( HttpServletRequest request )
  2. {
  3. // New disk fileUploadObject  
  4.     DiskFileUpload dFiles;
  5.     // Array of files from request
  6.     ArrayList filesItems = null;
  7.     // A file item
  8. DefaultFileItem fileItem;
  9. // Returned HttpParamsBean  
  10. HttpParamsBean hpb = new HttpParamsBean();
  11. // Count the number of uploaded files  
  12. int nNbItems = 0;
  13. // All the parameter names in the request
  14. Enumeration paramNames = request.getParameterNames();
  15. // A parameter name
  16. String paramName;
  17. // Parameters in the request are stored in the HttpParamsBean  
  18. // For each parameter name  
  19. while( paramNames.hasMoreElements() )
  20. {
  21.  paramName = (String)paramNames.nextElement();
  22.  // Add an array of strings in the HttpParamsBean
  23.  hpb.addStrings( paramName, request.getParameterValues( paramName ) );
  24. }
  25. // Si la requette peut contenir des fichiers  
  26. if( FileUpload.isMultipartContent( request ) )
  27. {
  28.  //Get an array with all the fileItems in the request
  29.  try
  30.  {
  31.   dFiles = new DiskFileUpload();
  32.   filesItems = (ArrayList) dFiles.parseRequest( request );
  33.  }
  34.  catch( FileUploadException e )
  35.  {
  36.   MsgLogService.log( 10000, MsgLogService.strLuteceModuleName, "L'upload du fichier a généré l'erreur:" + e );
  37.   return hpb;
  38.  }
  39.  // Count items.
  40.  nNbItems = filesItems.size();
  41.  // For each item
  42.  for( int i = 0; i < nNbItems; i++)
  43.  {
  44.   fileItem = (DefaultFileItem)filesItems.get( i );
  45.   // Form field
  46.   if( fileItem.isFormField() )
  47.   {
  48.    // Add a string in the HttpParamsBean
  49.    hpb.addString( fileItem.getFieldName(), fileItem.getString() );
  50.   }
  51.   // Uploaded file
  52.   else
  53.   {
  54.    // If in memory, write the file to disk.
  55.    if( fileItem.isInMemory() )
  56.    {
  57.     writeFileOnDisk( fileItem, fileItem.getStoreLocation().getAbsolutePath() );
  58.    }
  59.    // Add the fileItem in the HttpParamsBean
  60.    hpb.addFile( fileItem.getFieldName(), fileItem );
  61.   }
  62.  }
  63. }
  64. return hpb;
  65. }


 
Dans la classe ActionBean dont hérite toutes les classes de gestions des écrans, on commence par faire un appel à 'getParamsAndFilesFromRequest( request )' pour récupérer un HttpParamsBean.
Cette classe propose ensuite des méthodes protected d'accès aux paramètres :
protected String getParameter( String paramName )
protected ArrayList getParameterValues( String paramName )
protected DefaultFileItem getFileItem( String paramName )
 
Les classes de gestion des écrans n'ont donc qu'à utiliser ces trois méthodes de la superClasse sans se poser plus de question.


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

Y a pas mal de cas d'erreur dans ta première classe : si tu fais getParameter() en passant le nom d'un paramêtre, tu vas te manger un classcastexception, pareil dans l'autre sens ...  
 
y a aussi des cas où tu fais un contains pour retourner null (si c'est false), ce qui est unitule puisqu'un get te retournera null si la clef n'est pas présente ...
 
tu devrais utiliser 2 map séparées ...


Message édité par benou le 11-02-2004 à 12:01:45

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

J'avais fait 2 maps au début, et j'ai trouvé qu'en fait c'est inutile. Mais t'as raison, on ne mélange pas les torchons et les serviettes si on peut le faire.
Ok pour les "null", mais je préfère garder cette structure pour le cas où il faudrait retourner autre chose que null ou par exemple générer une exception.


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

benou a écrit :

Y a pas mal de cas d'erreur dans ta première classe : si tu fais getParameter() en passant le nom d'un paramêtre, tu vas te manger un classcastexception, pareil dans l'autre sens ...  


En fait je ne suis pas certain de comprendre, t'as l'air de dire que mon code va planter systémétiquement (ce qui n'est pas le cas). Je pense qu'en fait c'était juste pour introduire la notion des 2 maps c'est bien çà ?
Et : "pareil dans l'autre sens", tu veut dire quoi là ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°638790
benou
Posté le 11-02-2004 à 12:51:42  profilanswer
 

Mara's dad a écrit :


En fait je ne suis pas certain de comprendre, t'as l'air de dire que mon code va planter systémétiquement (ce qui n'est pas le cas).  


oui il plantera systématiquement dans le cas ou tu essayes de récupérer un file en passant le nom d'un parametre ... ou inversement un parametre en passant le nom d'un file.


---------------
ma vie, mon oeuvre - HomePlayer
n°638795
benou
Posté le 11-02-2004 à 12:52:36  profilanswer
 

Mara's dad a écrit :


Ok pour les "null", mais je préfère garder cette structure pour le cas où il faudrait retourner autre chose que null ou par exemple générer une exception.


dans ce cas ne fait pas de contains : fais un get, test si c'est null est si c'est null tu retourne null ... l'idée c'est d'éviter de faire 2 recherches dans la map ...


---------------
ma vie, mon oeuvre - HomePlayer
mood
Publicité
Posté le 11-02-2004 à 12:52:36  profilanswer
 

n°638935
Mara's dad
Yes I can !
Posté le 11-02-2004 à 13:57:30  profilanswer
 

Ok, merci pour tout.
J'ai remis les 2 maps, et je virre les contains innutils.
A+


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°638945
Mara's dad
Yes I can !
Posté le 11-02-2004 à 14:01:50  profilanswer
 

Arf, gaffe quand même pour getParameter.
Si null, je ne peut pas faire de get(0) :D
 

Code :
  1. public String getParameter( String name )
  2. {
  3.  ArrayList al = (ArrayList)_StringParameters.get( name );
  4.  if( al == null )
  5.  {
  6.   return null;
  7.  }
  8.  else
  9.  {
  10.   return (String)al.get( 0 );
  11.  }
  12. }



---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°938833
Mazda3
Posté le 06-01-2005 à 10:17:08  profilanswer
 

J'ai essayé d'uploader une image avec DiskFileUpload.  
 
Mais lors de l'envoi au formulaire, j'ai ceci :

Citation :

java.util.NoSuchElementException
 at java.util.AbstractList$Itr.next(AbstractList.java:426)
 at servlet.uploadFichier.doPost(uploadFichier.java:41)
 a


 
Voici mon code
 

Code :
  1. public class uploadFichier extends HttpServlet {
  2. public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
  3.  PrintWriter out = res.getWriter();
  4.  HttpSession laSession;
  5.  laSession = req.getSession(true);
  6.  String path = getServletContext().getRealPath("/" );
  7.  try {
  8.   DiskFileUpload fu = new DiskFileUpload();
  9.   // maximum size before a FileUploadException will be thrown
  10.   fu.setSizeMax(1000000);
  11.   // maximum size that will be stored in memory
  12.   fu.setSizeThreshold(4096);
  13.   // the location for saving data that is larger than getSizeThreshold()
  14.   fu.setRepositoryPath(path+"tmp" );
  15.   List fileItems = fu.parseRequest(req);
  16.   // assume we know there are two files. The first file is a small
  17.   // text file, the second is unknown and is written to a file on
  18.   // the server
  19.   Iterator i = fileItems.iterator();
  20.   String comment = ((FileItem) i.next()).getString();
  21.   FileItem fi = (FileItem) i.next();
  22.   // filename on the client
  23.   String fileName = fi.getName();
  24.   // save comment and filename to database
  25.   // write the file
  26.   File outFileDir = new File(path+"images\\" );
  27.   if (!outFileDir.exists())
  28.    outFileDir.mkdirs();
  29.   outFileDir = new File(outFileDir + fileName);
  30.   fi.write(outFileDir);
  31.  } catch (FileUploadException e) {
  32.   e.printStackTrace();
  33.  } catch (Exception e) {
  34.   e.printStackTrace();
  35.  }
  36. }
  37. public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException{
  38.  doPost(req, res);
  39. }
  40. }


 
Si une ame bien veillante,pourrait m'aider  :jap:


Message édité par Mazda3 le 06-01-2005 à 10:18:16
n°938837
Mazda3
Posté le 06-01-2005 à 10:19:30  profilanswer
 

D'apres ce que je comprends il ne recupere pas l'adresse ?

n°938872
benou
Posté le 06-01-2005 à 10:54:30  profilanswer
 

Citation :

// assume we know there are two files.


tu assumes mal [:spamafote]


---------------
ma vie, mon oeuvre - HomePlayer
n°938898
Mazda3
Posté le 06-01-2005 à 11:08:09  profilanswer
 

benou a écrit :

Citation :

// assume we know there are two files.


tu assumes mal [:spamafote]


 
oui, oui j'ai compris. :)

n°1405736
sam69
va bien !
Posté le 12-07-2006 à 16:45:48  profilanswer
 

Détarrage de topic inside ;-)
J'était en train de galérer aussi à faire une fonction qui gère de manière transparante les paramètres des formulaires en multipart ou non.
Mazda3 tu as le code final de ta petite fonction utilitaire ? Ca me rendrait bien service :-)
Merci d'avance !

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

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-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)