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

  FORUM HardWare.fr
  Programmation
  Java

  Upload en Java/jsp

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Upload en Java/jsp

n°1434914
Aquarius_2​8
Posté le 01-09-2006 à 10:35:36  profilanswer
 

Bonjour,
J'ai besoin de dans une application web d'uploader un fichier xml, jusque là rien d'insurmontable.
Mais le truc c'est qu'on est en mesure de me fournir de TRES gros fichier xml (genre 250 Mo) !
Et ce que je souhaite faire c'est d'acepter de tel upload mais de couper le flux dès que j'ai reçu, disont 10 Mo de données.
Le fichier obtenu sera bien entendu incomplet mais ceci est un autre probleme que je sais déja résoudre.
 
J'ai cherché sur le WEb hier mais je n'ai trouvé que des classe trop bien faites, je recherche vraiment un truc de base
du genre une classe apellée par ma jsp qui le lit flux et le coupe une fois que c'est bon.
 
Merci d'avance pour votre aide

mood
Publicité
Posté le 01-09-2006 à 10:35:36  profilanswer
 

n°1434938
benou
Posté le 01-09-2006 à 10:58:20  profilanswer
 

si tu trouves pas ce qu'il te faut, code le toi même, c'est pas sorcier ...

n°1434944
Aquarius_2​8
Posté le 01-09-2006 à 11:07:30  profilanswer
 

Justement c'est ça la question comment en Jsp ou java on récupere le flux post ? et comment le lire?

n°1434949
benou
Posté le 01-09-2006 à 11:08:58  profilanswer
 

request.getInputStream()

n°1434952
Aquarius_2​8
Posté le 01-09-2006 à 11:10:23  profilanswer
 

merci beaucoup ! putain c'est simple en plus !

n°1435115
Aquarius_2​8
Posté le 01-09-2006 à 14:20:01  profilanswer
 

Bon voilà vite fait ce que fait la jsp en question
 

Code :
  1. InputStream in;
  2. DataInputStream dis;
  3. try {
  4. in = request.getInputStream();
  5. out.println (in + "=<hr />" );
  6. dis = new DataInputStream(in);
  7. // Lire le fichier jusqu'à la fin
  8.  String ligne = dis.readLine();
  9. int i = 0;
  10. out.println ("debut" );
  11. while((ligne = dis.readLine()) != null && i< 1500)
  12. {
  13.  ligne = dis.readLine();
  14.         //out.println(ligne);
  15.  i++;
  16. }
  17. out.println (i+"lignes lue<hr />" );
  18. dis.close();
  19. in.close();
  20. return;
  21. } catch (IOException ex) {
  22. out.println("erreur" + ex);
  23. }


 
Le truc c'est que pour un très gros fichier genre 500 Mo, 'jvoulais pousser la bête un peu loin, j'ai pas l'impression qu'il coupe l'upload.
ca prend du temps alors que je lit directement le flux.


Message édité par Aquarius_28 le 01-09-2006 à 14:23:39
n°1435136
Aquarius_2​8
Posté le 01-09-2006 à 14:46:40  profilanswer
 


Donc la question est comment couper le flux entrant une fois que j'ai lu ce que je voulais ?

n°1435147
sircam
I Like Trains
Posté le 01-09-2006 à 14:53:33  profilanswer
 

Mauvaise gestion des exceptions. Les streams ne seront pas fermés en cas d'erreur avant l'appel à close().


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1435177
Aquarius_2​8
Posté le 01-09-2006 à 15:19:25  profilanswer
 

C'est pour ça que j'incrémente un compteur.
Ce compteur permet de sortir de la boucle une fois par exemple 15000 lignes lues.
après avoir lu ces 15000 ligne d'un fichier de 400 Mo, je souhaiterais fermé le flux de données allant de client vers le serveur, ainsi au lieu de faire transiter 4000 Mo, je ne fait transiter que 2 Mo.

n°1435212
Aquarius_2​8
Posté le 01-09-2006 à 15:56:23  profilanswer
 

J'ai essayer de fermer le request mais bon aucune méthode de dispo...

mood
Publicité
Posté le 01-09-2006 à 15:56:23  profilanswer
 

n°1435304
benou
Posté le 01-09-2006 à 17:52:37  profilanswer
 

Aquarius_28 a écrit :

je souhaiterais fermé le flux de données allant de client vers le serveur, ainsi au lieu de faire transiter 4000 Mo, je ne fait transiter que 2 Mo.


T'as essayé de simplement envoyer la réponse ?
 
 
PS: attention, tu ne gères pas l'encoding de ton fichier. D'ailleur, ca doit t'être indiqué par ton idée : readLine est dépréciée : http://java.sun.com/j2se/1.4.2/doc [...] readLine()

n°1435334
sircam
I Like Trains
Posté le 01-09-2006 à 18:50:08  profilanswer
 

Aquarius_28 a écrit :

C'est pour ça que j'incrémente un compteur.


Ca n'a rien à voir. La gestion des exceptions reste incorrecte.   [:pingouino]  


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1435420
Aquarius_2​8
Posté le 01-09-2006 à 23:11:48  profilanswer
 

sircam a écrit :

Ca n'a rien à voir. La gestion des exceptions reste incorrecte.   [:pingouino]


Ca n'a rien à voir. La gestion des exceptions reste incorrecte.   [:pingouino]  
 
je suis d'arroc, mais ce n'est pas ça qui va résoudre mon probleme, quoi qu'il en soit je fermerais autrement les flux.
 

sircam a écrit :

Ca n'a rien à voir. La gestion des exceptions reste incorrecte.   [:pingouino]
T'as essayé de simplement envoyer la réponse ?


 
Huum c'est à dire?
c'est dommage j'ai pas d'IDE chez moi mais tu pense qu'avec un response.LaMethodeQuiVaBien() ca pourrait le faire?

n°1435421
Aquarius_2​8
Posté le 01-09-2006 à 23:12:08  profilanswer
 

Mais bon j'vais cherchez

n°1435447
benou
Posté le 01-09-2006 à 23:42:46  profilanswer
 

y a pas de "méthode qui va bien". sert juste la réponse de façon normal ... logiquement, le browser devrait arrêter son envoi (je susi pas certain de moi)
 
peut être que tu peux le lui indiquer en lui balançant un header http spécial genre connection: close

n°1435478
Aquarius_2​8
Posté le 02-09-2006 à 00:45:22  profilanswer
 

Excuse moi si mes questions te semblent trop évidente mais ce domaine de Java j'le maitrise pas trop...
 
mais qu'entend tu par envoyer la réponse ?
Car en regardant la doc de httpresponseServlet j'ai trouvé
response.setHeader("Connection", "close" );
ou alors aussi  
response.sendError(HttpServletResponse.SC_PARTIAL_CONTENT);
Mais ca ne change rien peut être qu'il n'envoie pas la réponse ?
Comment envoyer la réponse pendant la reception du flux ??

Message cité 1 fois
Message édité par Aquarius_28 le 02-09-2006 à 01:08:21
n°1435491
Aquarius_2​8
Posté le 02-09-2006 à 01:48:42  profilanswer
 

Bon si jamais vous trouver vous êtes les rois du monde !
Je écumé le net mais pour l'instant ca ne sert a rien ...
 
Merci Benou paske j'ai quand même bien avancé grace a toi !

n°1435496
Aquarius_2​8
Posté le 02-09-2006 à 03:37:40  profilanswer
 

Bon finalement je vais me diriger vers une solution un peu new age ...
pour uploader un fichier, il faut cliquer sur un bouton ouvrant une pop-up, cette pop-up proposera une interface toute bete POST file.
coté serveur l'upload enregistrera en base le début d'Upload.
A la fin de me traitement, j'enregistre la fin du traitement, qui ne coorespond aps forcement avec la fin d'upload  reel car je souahite pouvoir uploader que les 15 000 premiere lignes d'un fichier.
Pendant ce temps, coté client dans la page ouvrant la pop up de telechargement. une petite fonction ajax envoie une requete afin de vérifier si l'upload est terminé, si c'est le cas elle ferme la pop up, et la connexion par la même occasion !
 

n°1435537
sircam
I Like Trains
Posté le 02-09-2006 à 11:45:34  profilanswer
 

OMFG. [:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1435567
Aquarius_2​8
Posté le 02-09-2006 à 12:22:31  profilanswer
 

Bah ecoute si t'a une meilleur idée j'suis preneur ...

n°1435657
benou
Posté le 02-09-2006 à 16:33:07  profilanswer
 

ben t'as essayé la mienne d'idée ?

n°1435658
benou
Posté le 02-09-2006 à 16:35:57  profilanswer
 

Aquarius_28 a écrit :


Mais ca ne change rien peut être qu'il n'envoie pas la réponse ?
Comment envoyer la réponse pendant la reception du flux ??


t'envoi la réponse simplement en sortant de la méthode service (enfin doGet ou doPost).
Par défaut, ca renvoir une réponse "200 - OK". Si tu veux voir quelque chose dans ton navigateur tu fais response.getOutputStream().write("reponse envoyee" );
 
je pense que si le client reçoit une réponse du serveur, il va peut être arrêter d'envoyer sa requête ...

n°1435802
Aquarius_2​8
Posté le 03-09-2006 à 01:07:07  profilanswer
 

C'est ce que je pensait aussi mais il attend de finir d'envoyer sa requete avant de lire celle envoyé par le serveur.
Il fait la sourde oreille !
Mais bon là j'ai mis au point ce petit "framework" et ca marche tout comme il faut, et en partie (en très grosse partie même) grace a toi !
Ca permet de controler l'upload, tu peut même si tu en a envie de faire une progresse barre, mais ca serait un peu lourd quand même au niveau mise à jour de la base.

mood
Publicité
Posté le   profilanswer
 


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

  Upload en Java/jsp

 

Sujets relatifs
[JAVA] Contrôler le contenu d'un Stringscript d'upload
Upload en JAVAUpload en JAVA
Applet Java : Redimensioner une image + upload vers FTPUpload de photos en java
[JAVA] Help! upload + envoi d'email avec pièce jointeUpload de ficheir en JAVA, Pb incompréhensible
[PHP-JAVA] Progress bar upload ?[Java / JSP] upload d'un fichier
Plus de sujets relatifs à : Upload en Java/jsp


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