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

  FORUM HardWare.fr
  Programmation
  Java

  upload

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

upload

n°830688
kouadjalai​n
Posté le 24-08-2004 à 12:17:32  profilanswer
 

Salut,
je fais une appli web en utilisant des servlets.
je voudrais que mon aplli permette d'uploader des fichiers depuis le client sur le serveur.
J'ai fait des recherches je sais qu'au niveau du form, il faut mettre le type en muti-part.
Mais comment traiter le champ au niveau e ma servlet.
Je n'ai pas trouver en fait les classes qui me permettent de le manipuler.
 
Merci de m'indiquer une solution

mood
Publicité
Posté le 24-08-2004 à 12:17:32  profilanswer
 

n°830733
benou
Posté le 24-08-2004 à 13:05:32  profilanswer
 
n°830860
kouadjalai​n
Posté le 24-08-2004 à 14:38:14  profilanswer
 

oui mais j'utilise pas apache.
je suis sous IIS et mon moteur de servlet est REsin

n°830874
benou
Posté le 24-08-2004 à 15:13:52  profilanswer
 

ca n'a rien avoir avec le serveur HTTP apache ... apache c'est une organisation dont le serveur HTTP n'est qu'un des très (très très) nombreux projets.
 
le truc dont je t'ai filé le lien fonctionne avec n'importe quel moteur de servlet, dont Resin ...


---------------
ma vie, mon oeuvre - HomePlayer
n°837479
lsf
Posté le 31-08-2004 à 10:28:24  profilanswer
 

Bonjour,
 
j'utilise ce package mais j'ai un problème lors de la reception de la requete. L'exception "the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is null" est levée lors de l'execution de:
List fileItems = fu.parseRequest(req);
 
Quequ'un a déjà eu ce problème et peut m'aider?
 
Merci d'avance
Cédric
 
Voici un extrait de mon code:
<HTML>
  <HEAD>
    <TITLE>Accueil</TITLE>
  </HEAD>
  <BODY BGCOLOR="#FDF5E6">
    <H1 ALIGN="CENTER">Enregistrer un fichier sur le serveur</H1>
    <FORM ACTION="./uploader" METHODE="POST" ENCTYPE="multipart/form-data">
      S&eacute;lectionnez le(s) fichier(s) que vous souhaitez uploader.<br><br>
      FICHIER1 : <INPUT TYPE="file" NAME="monFichier"><br>
      <INPUT TYPE="submit" VALUE="Envoyer !">
    </FORM>
  </BODY>
</HTML>
 
et la méthode appelée par doPost de ma servlet:
public boolean gererFichiers(HttpServletRequest req) {
  try {
     
    DiskFileUpload fu = new DiskFileUpload();
    fu.setSizeMax(1024 * 512); // 512 K
    fu.setSizeThreshold(4096);
    fu.setRepositoryPath("C:\\WUTemp" );
     
    List fileItems = fu.parseRequest(req);
    if (fileItems == null) {
       return false;
    }
     
    //Iteration sur chaque fichier (au cas ou je modifie le HTML et ajoute plusieurs transferts)  
    Iterator i = fileItems.iterator();
    FileItem enCours= null;
     
    while (i.hasNext()) {
      enCours = (FileItem) i.next();
      String fileName = enCours.getName();
                     
      File fichier = new File(fileName);
 
      fichier = new File("C:\\WUTemp\\" + fichier.getName());
 
      enCours.write(fichier);
    }
             
  } catch (Exception e) {
      System.out.println("Erreur de l'application " + e.getMessage());
      return false;
    }
 
  return true;
  }

n°837809
bragadocio
Posté le 31-08-2004 à 13:38:02  profilanswer
 

bonjour,

Code :
  1. /**
  2. * Classe implémentant l'interface <code>javax.activation.DataSource</code>
  3. * pour des objets du type <code>javax.servlet.http.HttpServletRequest</code>.
  4. * <p>Cet objet permet d'initialiser l'analyseur MIME
  5. * <code>javax.mail.internet.MimeMultipart</code> de l'API JavaMail.
  6. * L'intérêt est de pouvoir récupérer des fichiers uploadés dans une requête HTTP POST,
  7. * ce qui est malheureusement impossible avec l'API Servlet.</p>
  8. * <p>On peut alors écrire quelque chose comme ça :<pre>
  9. * HttpRequestDataSource ds = new HttpRequestDataSource(request);
  10. * MimeMultipart mp = new MimeMultipart(ds);
  11. * MimeBodyPart bp = (MimeBodyPart) mp.getBodyPart(0);</pre></p>
  12. */
  13. public class HttpRequestDataSource implements DataSource{
  14. /**
  15. * Référence sur la requête.
  16. */
  17. private HttpServletRequest request;
  18. /**
  19. * Constructeur standard.
  20. */
  21. public HttpRequestDataSource(HttpServletRequest request) {
  22. this.request = request;
  23. }
  24. /**
  25. * Retourne un <code>InputStream</code> sur la requête.
  26. * Cela permet de lire les données de la requête.
  27. * @return un <code>InputStream</code>
  28. */
  29. public InputStream getInputStream() throws IOException {
  30. if (request == null)
  31.  return null;
  32. return request.getInputStream();
  33. }
  34. /**
  35. * Retourne un <code>OutputStream</code> sur la requête.
  36. * Mais comme il ne peut pas y en avoir, cette méthode se
  37. * contente de renvoyer <code>null</code>.
  38. * @return <code>null</code>
  39. */
  40. public OutputStream getOutputStream() throws IOException {
  41. return null;
  42. }
  43. /**
  44. * Retourne le <code>Content-Type</code> de la requête.
  45. * @return la valeur du paramètre <code>Content-Type</code>
  46. */
  47. public String getContentType() {
  48. if (request == null)
  49.  return null;
  50. return request.getContentType();
  51. }
  52. /**
  53. * Retourne un nom pour l'objet.
  54. * @return la chaîne <code>"HttpRequest"</code>
  55. */
  56. public String getName() {
  57. return "HttpRequest";
  58. }
  59. }


 
et dans ta servlet:

Code :
  1. HttpRequestDataSource ds = new HttpRequestDataSource(request);
  2.        Log.trace("DeclarationServlet","doPost()","dataSource des  fichiers  importer = ok" );
  3.        MimeMultipart mp = new MimeMultipart(ds);
  4.        Log.trace("DeclarationServlet","doPost() ","MimeMultipart = ok" );
  5.        MimeBodyPart bp;
  6.        Log.trace("DeclarationServlet","doPost()","MimeMultipart.getCount() = "+mp.getCount());
  7.        for (int i=0; i<mp.getCount(); i++) {
  8.        bp = (MimeBodyPart) mp.getBodyPart(i);
  9.            if (bp.getFileName() != null) {
  10.                Log.trace("DeclarationServlet","doPost()"," file N° "+i+" = "+bp.getFileName() );
  11.                BufferedReader fichier = null;
  12.         if (bp.getContent() instanceof String) {
  13.              Log.trace("DeclarationServlet","doPost()"," file N°"+i+" est un  fichier text " );
  14.                     fichier = new BufferedReader( new StringReader((String) bp.getContent()) );


 
dans ta jsp:

Code :
  1. <form name="importation"  onSubmit="return controlXML();" enctype="multipart/form-data"  action="<%=servletPath%>/ImportationServlet" method="post" >


 
voila ca marche  et java pour tous!
salut

n°838560
lsf
Posté le 01-09-2004 à 09:57:02  profilanswer
 

Merci bragadocio,
 
je suis en train d'essayer ta méthode mais j'ai 2 questions:  
-je ne dispose pas des Classes : MimeMultipart et MimeBodyPart. Elles proviennent d'un jar que tu as installé?
-Le code lit les fichiers de texte (if (bp.getContent() instanceof String)), comment lire si c'est une image qui est uploadée?
Merci.

n°838695
bragadocio
Posté le 01-09-2004 à 13:09:55  profilanswer
 

bonjour,
 
1-
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
j2ee.jar(http://java.sun.com/j2ee/1.4/docs/api/index.html)
 
2- pour une image , laisse tomber le  instanceof String, et remplace le avec un stream ou qlq chose comme ca , a priori ca dois marcher
 
salut


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

  upload

 

Sujets relatifs
Upload en phpUpload multiple : en PHP ?
[PHP] Probleme avec un formulaire d'upload...Garder le path complet lors d'upload via formulaire html
[Résolu] CGI et upload de fichier[PHP] test upload de fichier (resolu)
[CGI - C] Upload de fichierprobleme : taille de fichier limitée à 2Mo en upload (ovh)...
upload d'image 
Plus de sujets relatifs à : upload


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)