IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

[Tomcat][Jsp][Upload]Limiter la taille d'un upload...


Sujet :

Servlets/JSP Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 5
    Points : 5
    Points
    5
    Par défaut [Tomcat][Jsp][Upload]Limiter la taille d'un upload...
    Bonjour à tous,

    Aprés x recherches infructueuses, je me suis décidé à poser la question, qui ça se trouve, est toute simple mais bon...

    Je dois récupérer un fichier texte du client ves le serveur afin de procéder à un traitement dessus.
    De ce côté là, pas de problème, tout fonctionne bien (vive FileUpload )

    Or le souci que je veux limiter la taille du fichier envoyé à 1Mo max (ce qui est déjà énorme pour le fichier texte qu'il doit envoyer...)

    J'arrive à empêcher le traitement sur le fichier si celui-ci dépasse 1Mo, mais moi j'aimerais que le transfert se stoppe tout seul dès que les 1Mo sont atteints et envoyer un message d'erreur ou autre
    Le but étant d'éviter de surcharger le serveur avec des upload de barbares...

    Or, le paramètre 'maxlength' du tag HTML <input> ne semble pas réagir (il semblerait que cela ait été abandonné lors du HTML 4.x...)

    Je me demandais s'il n'existait pas un moyen de stopper le traitement dès les 1Mo d'upload atteint... Au lieu d'attendre la fin puis de vérifier la taille du fichier.

    Je me demandais donc si c'était faisable, et si oui, vers quelle direction dois-je m'orienter pour réaliser cela

    Merci d'avance!

  2. #2
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Je crois que malheureusement ce n'est pas possible de le faire depuis le client... J'imaginais eventuellement une solution en javascript. mais apres quelques recherches apparement ce n'est pas possible.

    Je crois qu'en php c'est possible!
    Avec FileUpload, tu peux faire quelquels controles basic :

    J'ai trouvé cela sur le site du projet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     If your usage scenario is close to the simplest case, described above, but you need a little more control over the size thresholds or the location of temporary files, you can customize the behavior using the methods of the DiskFileUpload class, like this:
     
    // Create a new file upload handler
    DiskFileUpload upload = new DiskFileUpload();
     
    // Set upload parameters
    upload.setSizeThreshold(yourMaxMemorySize);
    upload.setSizeMax(yourMaxRequestSize);
    upload.setRepositoryPath(yourTempDirectory);
     
    // Parse the request
    List /* FileItem */ items = upload.parseRequest(request);
     
    Of course, each of the configuration methods is independent of the others, but if you want to configure them all at once, you can do that with an alternate parseRequest() method, like this:
     
    // Create a new file upload handler
    DiskFileUpload upload = new DiskFileUpload();
     
    // Parse the request
    List /* FileItem */ items = upload.parseRequest(request,
            yourMaxMemorySize, yourMaxRequestSize, yourTempDirectory);
    je ne sais pas si tu connaissais....mais je ne vois pas d'autre moyen de faire je pense..

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Salut et merci pour ta réponse


    Oui, c'est exactement ce que j'ai fait avec fileUpload.

    Par contre ce que je ne comprend pas, c'est où va le fichier quand on met une limite sur la taille...
    Je m'explique:
    J'ai fais des tests avec un fichier de 350Mo (histoire de voir où il se trouve le temps du transfert )
    Et quand je mets une limite à 1Mo, celui-ci n'apparaît pas dans le répertoire temporaire défini.
    Quand j'enlève cette limite, il apparaît bien dans le répertoire...

    Après avoir lancé le gestionnaire des tâches sur le serveur pour vérifier l'utilisation du proc et de la mémoire, et lancé un navigateur sur un poste client, rien ne bouge même si j'envoie un fichier de 600Mo

    Donc, c'est le navigateur du client qui met ce fichier en 'mémoire' ou ailleurs avant de l'envoyer au serveur (ce qui semble logique, vu qu'il doit récupérer la totalité du formulaire avant de l'envoyer) et du coup, avec le limite de FileUpload, le serveur ne se prend rien

    Je me suis pris la tête pour rien
    La prochaine fois je ne ferai pas mes tests sur le serveur lui-même

    En tout cas, je pense que cela résout mon problème qui était la surcharge du serveur...
    Par contre, cela ne résout pas le fait d'empêcher le poste client de charger la totalité du fichier (mais ceci n'est pas encore, pour ma part, à l'ordre du jour )

    Merci encore

  4. #4
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    Je pense que le client ouvre un stream sur le serveur... la servlet qui recupere le fichier doit surement controler la taille du fichier à la volée.

    car je vois pas pourquoi le client chargerait intégralement avant de l'envoyer.. Je pense que le fichier est transmis au fur et à mesure..
    (Enfin je pense... )

    Aussi pour verifier cela.. essaie de telecharger ton fichier de 600Mo en fixant la taille maxi à 500 Mo. Cela laisserai le temps de commencer le telecharger... car 1 Mo c'est tres petit...

    Peut etre que le serveur ne créé pas de fichier dans le repertoire temporaire car il doit d'abord charge en memoire une partie du fichier avant d'ecrire sur le disque et la taille max parametrée est largement inferieure à ce seuil et il n'a pas le temps d'ecrire ...

    Le resultat du test m'interesserai.. donc si tu as l'occasion de le faire...

  5. #5
    Futur Membre du Club
    Inscrit en
    Janvier 2003
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Salut,


    Et bien, d'après mes tests, la mémoire utilisée par Java ne bouge que lorsque la taille du fichier est inférieure à la limite...
    C'est à dire quand la lecture puis le traitement du fichier commence.
    Sinon, RAS du côté de la mémoire...

    J'ai mis la limite à 50Mo.
    Upload de fichiers de + de 50Mo: la mémoire ne bouge jamais.
    Upload de fichiers de - de 50Mo: la mémoire bouge seulement à la fin de l'envoi, et non pas au fur et à mesure !!!!

    En fait, c'est le processus 'System' qui monte en charge de même que le réseau, quel que soit la taille du fichier...

    Donc, le client envoie bien au fur et à mesure le fichier au serveur, qui doit l'écrire quelquepart (mais où?????) avant même qu'il ne soit interprété par le jsp...
    C'est pourquoi la mémoire Java ne bouge que lorsque FileUpload a vérifié que la taille du fichier reçu est inférieure à la limite.

    Donc, malheureusement, le serveur risque d'avoir quelques soucis si 40 utilisateurs transfèrent de gros fichiers pour "s'amuser"

    Je ne vois pas trop quoi faire là
    Je pense que je vais laisser ça comme ça pour le moment...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur limitation du taille upload file
    Par devvirtual dans le forum Struts 2
    Réponses: 2
    Dernier message: 01/07/2008, 11h30
  2. [Upload] Probleme de taille sur un upload
    Par Neilime05 dans le forum Langage
    Réponses: 5
    Dernier message: 10/04/2008, 16h32
  3. Limiter la taille d'upload
    Par threshold dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 11/01/2008, 20h40
  4. [Upload] upload d'image : en limiter la taille
    Par Silvia12 dans le forum Langage
    Réponses: 2
    Dernier message: 06/09/2007, 17h16
  5. [Upload] réduire la taille d'un upload
    Par loubna4e dans le forum Langage
    Réponses: 1
    Dernier message: 27/06/2006, 12h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo