You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users-fr@cocoon.apache.org by Philippe Guillard <pg...@citycita.net> on 2005/08/07 10:07:05 UTC

taille max pour les upload de fichiers

Bonjour,

La limitation de taille de l''upload' de fichiers dans web.xml permet 
d'afficher un message d'erreur du conteneur en cas d'exces et me semble 
la pour eviter la saturation du disque. Par contre au niveau de 
l'application, CForms par exemple, j'ai besoin d'afficher un message 
plus "propre" a l'utilisateur (qui aurait oublie de retailler sa photo 
par example), comme le reste des validations du formulaire.
La solution que j'envisage est de limiter la taille au niveau web.xml 
pour preserver les vrais abus sur des grosses tailles, et limiter la 
taille reelle de mes upload au moment ou je les traite, donc verifier la 
taille du fichier present dans le repertoire work au moment de son 
traitement dans le flow.
Cette facon de voir est-telle bonne?

Merci d'avance,
Phil

---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: taille max pour les upload de fichiers

Posted by Jean-Baptiste Quenot <jb...@anyware-tech.com>.
* Philippe Guillard:

> Quand l'upload est > a  la limite dans web.xml, j'ai logiquement
> un page  d'erreur de  Jetty "Problem  in creating  the Request",
> est-t-il possible d'en faire quelquechose d'autre avec cocoon?

Même  problème  pour  nous,   c'est  très  gênant  car  totalement
incontrôlable depuis l'application.

Par contre il serait possible  d'ajouter un paramètre à la servlet
Cocoon pour donner  une URI de redirection en  cas d'erreur, qu'en
pensez-vous?
-- 
Jean-Baptiste Quenot
Systèmes d'Information
ANYWARE TECHNOLOGIES
Tel : +33 (0)5 61 00 52 90
Fax : +33 (0)5 61 00 51 46
http://www.anyware-tech.com/

---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: taille max pour les upload de fichiers

Posted by Sylvain Wallez <sy...@apache.org>.
Philippe Guillard wrote:

> Merci beaucoup Sylvain pour ces conseils.
> Une derniere question (comme a mon habitude..), toujours parce que je 
> suis light sur les webapp conteneurs, et parce que j'ai vu sur ton 
> blog que tu te penchais sur les messages d'erreurs :
> Quand l'upload est > a la limite dans web.xml, j'ai logiquement un 
> page d'erreur de Jetty "Problem in creating the Request",


Hmm... en toute logique, ça devrait être une IOException:"Content length 
exceeds maximum upload size"

> est-t-il possible d'en faire quelquechose d'autre avec cocoon?


A l'heure actuelle, non : les uploads sont traités dans CocoonServlet, 
donc bien avant que Cocoon lui-même ait son mot à dire dans le 
traitement de la requête. Je suis bien d'accord que ce n'est pas idéal 
pour afficher des messages corrects.

Je disais dans une précédente réponse qu'il y a l'interface Part et les 
implémentations PartInMemory et PartOnDisk. On pourrait avoir aussi une 
InvalidPart qui signalerait un upload invalide, et dont toutes les 
méthodes utiles lèveraient une exception, mais qui permettrait de 
traiter ces problèmes au niveau applicatif et non pas au niveau servlet. 
Le widget upload saurait bien évidemment gérer tout seul comme un grand 
ces InvalidPart.

Qu'en penses-tu ? Je crois que je vais en causer sur la liste de 
développement.

> Je suis dans cforms+portal, donc evidemment ca va pas du tout!


A propos du portal, on a en interne une version de Cocoon Forms avec 
Ajax qui fonctionne dans le portail. Bientôt chez Apache :-)

> Petite note : je vois que Lepido est tres bien parti c'est bien ! Cela 
> me parait le seul moyen pour ramener du monde pour que cocoon passe 
> d'une utilisation qui me semble quasi exclusive de documentation 
> Intranet a l'Internet!


Lepido (voir [1] si vous ne connaissez pas), les Cocoon stacktrace [2], 
toutes ces choses sur lesquelles je travaille en ce moment ont un but 
principal : faciliter l'utilisation de Cocoon ! C'est comme si on avait 
une voiture avec un moteur v12 turbocompressé, mais un habitacle où tous 
les fils et câbles sont apparents. Pas gênant pour les mécanos, mais pas 
vraiment grand public. Alors on installe en ce moment des caches, du 
métal brossé et bientôt du bois précieux :-)

PS: s'il y a des développeurs de plugins Eclipse sur la liste, ils sont 
les bienvenus sur Lepido !

> J'ai choisi cocoon pour le 2eme cas et me dis regulierement que je 
> suis fou!


Meuh non ! A moins que ça fasse 5 ans que je suis fou ;-)

Sylvain

[1] http://www.eclipse.org/lepido/
[2] http://www.anyware-tech.com/blogs/sylvain/archives/000207.html

-- 
Sylvain Wallez                        Anyware Technologies
http://people.apache.org/~sylvain     http://www.anyware-tech.com
Apache Software Foundation Member     Research & Technology Director


---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: taille max pour les upload de fichiers

Posted by Philippe Guillard <pg...@citycita.net>.
Merci beaucoup Sylvain pour ces conseils.
Une derniere question (comme a mon habitude..), toujours parce que je 
suis light sur les webapp conteneurs, et parce que j'ai vu sur ton blog 
que tu te penchais sur les messages d'erreurs :
Quand l'upload est > a la limite dans web.xml, j'ai logiquement un page 
d'erreur de Jetty "Problem in creating the Request", est-t-il possible 
d'en faire quelquechose d'autre avec cocoon? Je suis dans cforms+portal, 
donc evidemment ca va pas du tout!

Petite note : je vois que Lepido est tres bien parti c'est bien ! Cela 
me parait le seul moyen pour ramener du monde pour que cocoon passe 
d'une utilisation qui me semble quasi exclusive de documentation 
Intranet a l'Internet! J'ai choisi cocoon pour le 2eme cas et me dis 
regulierement que je suis fou!

Phil

Sylvain Wallez wrote:

> Sylvain Wallez wrote:
>
>> Philippe Guillard wrote:
>>
>>> Merci.
>>> J'ai donc ajoute ca a ma definition cform, peut etre pas propre mais 
>>> me donne le resultat attendu.
>>
>>
>>
>>
>> Super! Quelques petites remarques toutefois:
>>
>> - upload.value est de type "PartOnDisk". Le "new File(upload.value)" 
>> fonctionne parce PartOnDisk.toString() a la bonne idée de renvoyer le 
>> nom du fichier sur lequel il pointe. Il serait plus robuste 
>> d'utiliser directement "file = upload.file".
>
>
>
> En relisant l'API de org.apache.cocoon.servlet.multipart.Part, il y a 
> encore plus simple en utilisant Part.getSize() :
>   if (upload.value != null && upload.value.size > limit)...
>
> Au passage, rappelons que l'upload dans Cocoon peut être géré de deux 
> façons (réglage dans web.xml) :
> - par défaut, stockage de l'upload dans un fichier temporaire, qui 
> donne un PartOnDisk et qui fait qu'on peut utiliser "upload.value.file"
> - stockage en mémoire, qui donne un PartInMemory qui n'a pas la 
> méthode getFile()
>
> Si l'appli doit pouvoir fonctionner avec l'une ou l'autre de ces 
> configs, on utilisera donc l'API de l'interface Part qui fournit 
> getSize() et getInputStream() mais pas getFile()...
>
> Sylvain
>


---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: taille max pour les upload de fichiers

Posted by Sylvain Wallez <sy...@apache.org>.
Sylvain Wallez wrote:

> Philippe Guillard wrote:
>
>> Merci.
>> J'ai donc ajoute ca a ma definition cform, peut etre pas propre mais 
>> me donne le resultat attendu.
>
>
>
> Super! Quelques petites remarques toutefois:
>
> - upload.value est de type "PartOnDisk". Le "new File(upload.value)" 
> fonctionne parce PartOnDisk.toString() a la bonne idée de renvoyer le 
> nom du fichier sur lequel il pointe. Il serait plus robuste d'utiliser 
> directement "file = upload.file".


En relisant l'API de org.apache.cocoon.servlet.multipart.Part, il y a 
encore plus simple en utilisant Part.getSize() :
   if (upload.value != null && upload.value.size > limit)...

Au passage, rappelons que l'upload dans Cocoon peut être géré de deux 
façons (réglage dans web.xml) :
- par défaut, stockage de l'upload dans un fichier temporaire, qui donne 
un PartOnDisk et qui fait qu'on peut utiliser "upload.value.file"
- stockage en mémoire, qui donne un PartInMemory qui n'a pas la méthode 
getFile()

Si l'appli doit pouvoir fonctionner avec l'une ou l'autre de ces 
configs, on utilisera donc l'API de l'interface Part qui fournit 
getSize() et getInputStream() mais pas getFile()...

Sylvain

-- 
Sylvain Wallez                        Anyware Technologies
http://people.apache.org/~sylvain     http://www.anyware-tech.com
Apache Software Foundation Member     Research & Technology Director


---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: taille max pour les upload de fichiers

Posted by Sylvain Wallez <sy...@apache.org>.
Philippe Guillard wrote:

> Merci.
> J'ai donc ajoute ca a ma definition cform, peut etre pas propre mais 
> me donne le resultat attendu.


Super! Quelques petites remarques toutefois:

- upload.value est de type "PartOnDisk". Le "new File(upload.value)" 
fonctionne parce PartOnDisk.toString() a la bonne idée de renvoyer le 
nom du fichier sur lequel il pointe. Il serait plus robuste d'utiliser 
directement "file = upload.file".

- il y a "var file = ..." et "if (file2.length()...". Je suppose que 
"file2" est une coquille dans le mail, mais que c'est bien "file" dans 
le vrai code !

> <fd:validation>
> <fd:javascript>
>      var success = true;
>      var limit = 400000;//400K
>      var upload = widget.lookupWidget("upload");
>      if (upload.value!=null) {
>          var file = new Packages.java.io.File(upload.value);
>          if (file2.length() > limit) {
>              upload.setValidationError(new 
> Packages.org.apache.cocoon.forms.validation.ValidationError("SVP le 
> poids de l'image est limite a 400K", false));
>              success = false;                      }
>      }
>      return success;
> </fd:javascript>
> </fd:validation>


Sylvain

-- 
Sylvain Wallez                        Anyware Technologies
http://people.apache.org/~sylvain     http://www.anyware-tech.com
Apache Software Foundation Member     Research & Technology Director


---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: taille max pour les upload de fichiers

Posted by Philippe Guillard <pg...@citycita.net>.
Merci.
J'ai donc ajoute ca a ma definition cform, peut etre pas propre mais me 
donne le resultat attendu.
<fd:validation>
<fd:javascript>
      var success = true;
      var limit = 400000;//400K
      var upload = widget.lookupWidget("upload");
      if (upload.value!=null) {
          var file = new Packages.java.io.File(upload.value);
          if (file2.length() > limit) {
              upload.setValidationError(new 
Packages.org.apache.cocoon.forms.validation.ValidationError("SVP le 
poids de l'image est limite a 400K", false));
              success = false;             
          }
      }
      return success;
</fd:javascript>
</fd:validation>

Sylvain Wallez wrote:

> Philippe Guillard wrote:
>
>> Bonjour,
>>
>> La limitation de taille de l''upload' de fichiers dans web.xml permet 
>> d'afficher un message d'erreur du conteneur en cas d'exces et me 
>> semble la pour eviter la saturation du disque. Par contre au niveau 
>> de l'application, CForms par exemple, j'ai besoin d'afficher un 
>> message plus "propre" a l'utilisateur (qui aurait oublie de retailler 
>> sa photo par example), comme le reste des validations du formulaire.
>> La solution que j'envisage est de limiter la taille au niveau web.xml 
>> pour preserver les vrais abus sur des grosses tailles, et limiter la 
>> taille reelle de mes upload au moment ou je les traite, donc verifier 
>> la taille du fichier present dans le repertoire work au moment de son 
>> traitement dans le flow.
>> Cette facon de voir est-telle bonne?
>
>
>
> C'est une approche intéressante. On pourrait même envisager que le 
> validateur <fd:length> qui aujourd'hui fonctionne sur les nombres, 
> soit aussi applicable aux fd:upload.
>
> Sylvain
>


---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Re: taille max pour les upload de fichiers

Posted by Sylvain Wallez <sy...@apache.org>.
Philippe Guillard wrote:

> Bonjour,
>
> La limitation de taille de l''upload' de fichiers dans web.xml permet 
> d'afficher un message d'erreur du conteneur en cas d'exces et me 
> semble la pour eviter la saturation du disque. Par contre au niveau de 
> l'application, CForms par exemple, j'ai besoin d'afficher un message 
> plus "propre" a l'utilisateur (qui aurait oublie de retailler sa photo 
> par example), comme le reste des validations du formulaire.
> La solution que j'envisage est de limiter la taille au niveau web.xml 
> pour preserver les vrais abus sur des grosses tailles, et limiter la 
> taille reelle de mes upload au moment ou je les traite, donc verifier 
> la taille du fichier present dans le repertoire work au moment de son 
> traitement dans le flow.
> Cette facon de voir est-telle bonne?


C'est une approche intéressante. On pourrait même envisager que le 
validateur <fd:length> qui aujourd'hui fonctionne sur les nombres, soit 
aussi applicable aux fd:upload.

Sylvain

-- 
Sylvain Wallez                        Anyware Technologies
http://people.apache.org/~sylvain     http://www.anyware-tech.com
Apache Software Foundation Member     Research & Technology Director


---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org