Pb d'upload d'un fichier client=>serveur

Résolu
hluder Messages postés 35 Date d'inscription lundi 23 octobre 2006 Statut Membre Dernière intervention 6 juin 2008 - 2 mai 2008 à 11:54
srvinfor Messages postés 1 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 11 octobre 2008 - 11 oct. 2008 à 22:41
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

hluder Messages postés 35 Date d'inscription lundi 23 octobre 2006 Statut Membre Dernière intervention 6 juin 2008
6 mai 2008 à 10:19
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
3
shaiulud Messages postés 404 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 15 juillet 2014 22
2 mai 2008 à 13:00
re bonjour,
je te suis depuis ton dernier post,

je te conseille d'utiliser l'API FileUpload d'apache.
0
hluder Messages postés 35 Date d'inscription lundi 23 octobre 2006 Statut Membre Dernière intervention 6 juin 2008
2 mai 2008 à 14:00
Je ne connais pas cet api ...
Elle sert à quoi ?
et tu l'utilise comment?

(merci de tes réponses)

Nivraë - just her
0
shaiulud Messages postés 404 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 15 juillet 2014 22
4 mai 2008 à 12:58
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);
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
hluder Messages postés 35 Date d'inscription lundi 23 octobre 2006 Statut Membre Dernière intervention 6 juin 2008
5 mai 2008 à 09:37
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
0
hluder Messages postés 35 Date d'inscription lundi 23 octobre 2006 Statut Membre Dernière intervention 6 juin 2008
5 mai 2008 à 09:44
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
0
shaiulud Messages postés 404 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 15 juillet 2014 22
5 mai 2008 à 13:20
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).
0
hluder Messages postés 35 Date d'inscription lundi 23 octobre 2006 Statut Membre Dernière intervention 6 juin 2008
5 mai 2008 à 13:53
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
0
hluder Messages postés 35 Date d'inscription lundi 23 octobre 2006 Statut Membre Dernière intervention 6 juin 2008
5 mai 2008 à 15:07
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
0
srvinfor Messages postés 1 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 11 octobre 2008
11 oct. 2008 à 22:41
Bonjour,
Pouvez-vous me dire ou est stocker le fichier ?
0
Rejoignez-nous