Pb d'upload d'un fichier client=>serveur [Résolu]

Signaler
Messages postés
35
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
6 juin 2008
-
Messages postés
1
Date d'inscription
samedi 11 octobre 2008
Statut
Membre
Dernière intervention
11 octobre 2008
-
Bonjour!!!
Alors voilà mon nouveau probleme!
Mon client m'envoi un fichier, je le récupère et je le copie sur mon serveur
TOut pourait bien aller sauf que... le fichier sur mon serveur est vide

voilà mon code:

File file = new File(uri);//fichier qu ej'ai récupéré du client
File file3=new File(fichier); // je crée un fichier sur le serveur

FileOutputStream file2=new FileOutputStream(file3);
byte[] tab = new byte[(int)file.length()];
FileInputStream fi = new FileInputStream(file);
DataInputStream di = new DataInputStream(fi);
di.readFully(tab, 0, (int)file.length());
file2.write(tab);
 
//je close tout
file2.close();
fi.close();
di.close();

//utilisation de mon file
int res=MailClient.envoyerMail(dest,objet,message,file3);

aucune erreur n'est générée dans mon try-catch

Merci
------------------------
Nivraë - just her

10 réponses

Messages postés
35
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
6 juin 2008

Sa y est ça marche j'ai modifié le code en prenant un DiskFileUpload
Tout marche niquel!!

DiskFileUpload fu = new DiskFileUpload();
             // maximum size before a FileUploadException will be thrown
             fu.setSizeMax(1000000);
             // maximum size that will be stored in memory
             fu.setSizeThreshold(4096);
             // the location for saving data that is larger than getSizeThreshold()
             fu.setRepositoryPath("/tmp" );

             List fileItems = fu.parseRequest(request);
           
             Iterator i = fileItems.iterator();
             FileItem fi = (FileItem)i.next();
             // filename on the client
             String fileName = fi.getName();
             // save comment and filename to database
             System.out.println( "Description du fichier : "+fileName );
             // write the file
             File uploadfile=new File(fileName);
             fi.write(uploadfile);

voilà Merci encore de m'avoir guidé!

----------------------------

Nivraë - just her
Messages postés
405
Date d'inscription
mardi 18 décembre 2001
Statut
Membre
Dernière intervention
15 juillet 2014
19
re bonjour,
je te suis depuis ton dernier post,

je te conseille d'utiliser l'API FileUpload d'apache.
Messages postés
35
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
6 juin 2008

Je ne connais pas cet api ...
Elle sert à quoi ?
et tu l'utilise comment?

(merci de tes réponses)

Nivraë - just her
Messages postés
405
Date d'inscription
mardi 18 décembre 2001
Statut
Membre
Dernière intervention
15 juillet 2014
19
ette API est dispo ici : http://commons.<layer id= "google-toolbar-hilite-0" style="background-color: Yellow; color: black;">apache</layer>.org/fileupload/
Elle permet de récupérer des fichiers envoyées depuis une page web avec la balise input type=<layer id="google-toolbar-hilite-3" style="background-color: Cyan; color: black;">file</layer>

la doc est ici : http://commons.<layer id="google-toolbar-hilite-1" style="background-color: Yellow; color: black;">apache</layer>.org/fileupload/using.html

et les points inportant sont :
 - le formulaire en HTML
<form action="<layer id="google-toolbar-hilite-18" style="background-color: Fuchsia; color: black;">upload</layer>.do" method="POST"  enctype="multipart/form-data" >
   file</layer>" name ="monFichier">

  - le code java
// Create a factory for disk-based <layer id ="google-toolbar-hilite-5" style="background-color: Cyan; color: black;">file</layer> items
DiskFileItemFactory factory = new DiskFileItemFactory();

// Set factory constraints
factory.setSizeThreshold(yourMaxMemorySize);
factory.setRepository(yourTempDirectory);

// Create a new <layer id="google-toolbar-hilite-6" style="background-color: Cyan; color: black;">file</layer><layer id="google-toolbar-hilite-19" style="background-color: Fuchsia; color: black;">upload</layer> handler
ServletFileUpload <layer id="google-toolbar-hilite-20" style="background-color: Fuchsia; color: black;">upload</layer> = new ServletFileUpload(factory);

// Set overall request size constraint
<layer id="google-toolbar-hilite-21" style="background-color: Fuchsia; color: black;">upload</layer>.setSizeMax(yourMaxRequestSize);

// Parse the request
List /* FileItem */ items = <layer id="google-toolbar-hilite-22" style="background-color: Fuchsia; color: black;">upload</layer>.parseRequest(request);// request
est une instance de HttpServletRequest (diponible depuis le doGet ou le doPost de la servlet)

// .... traitement de contolez cf. doc

// Ecriture du fichier sur le serveur
<layer id="google-toolbar-hilite-28" style="background-color: Cyan; color: black;">File</layer> uploadedFile = new <layer id="google-toolbar-hilite-29" style="background-color: Cyan; color: black;">File</layer>(...);
item.write(uploadedFile);
Messages postés
35
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
6 juin 2008

Oula euh je me sens un peu a la ramasse

une API sa consiste en quoi? Est ce qu'il y a quelque chose a installer (source-binaire c'est quoi tout ça??)?

Je n'ai jamais utilisé d'API...

action="<layer id="google-toolbar-hilite-18">upload</layer>.do"  ?? pourquoi "upload.do" et pas ma servlet?

Nivraë - just her
Messages postés
35
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
6 juin 2008

Et aussi dans le code que tu m'a mis après, où est ce que tu récupère la valeur du "include type="file" name="monfichier" ??

Nivraë - just her
Messages postés
405
Date d'inscription
mardi 18 décembre 2001
Statut
Membre
Dernière intervention
15 juillet 2014
19
pour l'FileUpload, tu télécharge le jar sur lr site d'appache e tu le rajoute à ton class path (les lib de ton projet).

action="<layer id="google-toolbar-hilite-18">upload</layer>.do"   est en struts, ça peut être ta servlet => action="<layer id="google-toolbar-hilite-18">maServlet</layer>"

c'est en iterant ici :
List /* FileItem */ items = <layer id="google-toolbar-hilite-22">upload</layer>.parseRequest(request);

je te conseille de lire la documentation sur le site apache, et si je me rapelle bien il y a des exemples (sample in english).
Messages postés
35
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
6 juin 2008

Lut je m'enterre tellement sa m'enerve

Alors j'ai lu sur le net que je devais mettre a part mon upload de fichier (lui fair eun <form> rien qu'à lui

Mais le pb est : oui mais comment je fais pour valider les autre champs alors??
enfin bon je vais essayer de tester des tones de chose, en meme temps j'ai que ça comme solution.

Inventerons t'il un jour la doc en français....

Merci à toi

Nivraë - just her
Messages postés
35
Date d'inscription
lundi 23 octobre 2006
Statut
Membre
Dernière intervention
6 juin 2008

Bon jai un peu avancé mais j'ai uen erreur :
java.lang.NoSuchMethodError: org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(Lorg/apache/commons/fileupload/RequestContext;)Ljava/util/List;

elle vient à cause de :

            List /* FileItem */ items = upload.parseRequest(request);

Nivraë - just her
Messages postés
1
Date d'inscription
samedi 11 octobre 2008
Statut
Membre
Dernière intervention
11 octobre 2008

Bonjour,
Pouvez-vous me dire ou est stocker le fichier ?