Upload en Java/jsp

Upload en Java/jsp - Java - Programmation

Marsh Posté le 01-09-2006 à 10:35:36    

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

Reply

Marsh Posté le 01-09-2006 à 10:35:36   

Reply

Marsh Posté le 01-09-2006 à 10:58:20    

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

Reply

Marsh Posté le 01-09-2006 à 11:07:30    

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

Reply

Marsh Posté le 01-09-2006 à 11:08:58    

request.getInputStream()

Reply

Marsh Posté le 01-09-2006 à 11:10:23    

merci beaucoup ! putain c'est simple en plus !

Reply

Marsh Posté le 01-09-2006 à 14:20:01    

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
Reply

Marsh Posté le 01-09-2006 à 14:46:40    


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

Reply

Marsh Posté le 01-09-2006 à 14:53:33    

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}
Reply

Marsh Posté le 01-09-2006 à 15:19:25    

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.

Reply

Marsh Posté le 01-09-2006 à 15:56:23    

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

Reply

Marsh Posté le 01-09-2006 à 15:56:23   

Reply

Marsh Posté le 01-09-2006 à 17:52:37    

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()

Reply

Marsh Posté le 01-09-2006 à 18:50:08    

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}
Reply

Marsh Posté le 01-09-2006 à 23:11:48    

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?

Reply

Marsh Posté le 01-09-2006 à 23:12:08    

Mais bon j'vais cherchez

Reply

Marsh Posté le 01-09-2006 à 23:42:46    

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

Reply

Marsh Posté le 02-09-2006 à 00:45:22    

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
Reply

Marsh Posté le 02-09-2006 à 01:48:42    

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 !

Reply

Marsh Posté le 02-09-2006 à 03:37:40    

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 !
 

Reply

Marsh Posté le 02-09-2006 à 11:45:34    

OMFG. [:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 02-09-2006 à 12:22:31    

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

Reply

Marsh Posté le 02-09-2006 à 16:33:07    

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

Reply

Marsh Posté le 02-09-2006 à 16:35:57    

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 ...

Reply

Marsh Posté le 03-09-2006 à 01:07:07    

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.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed