Tomcat subir formularios de mas de 2MB


Recientemente necesitaba enviar a través del formulario una factura firmada. Las facturas no suelen ocupar mas de 100KB, pero cuando agregas adjuntos a la factura, este tamaño se puede incrementar hasta el infinito.

Estamos en el caso de un formulario normal, no un multipart. Para los multipart no hace falta nada de esta configuración. Los formularios multipart, son formularios de subida de ficheros, donde dentro del formulario existe un input del tipo “file”. Yo necesitaba hacerlo transparente al usuario, que firme a través de la web y el proceso de grabado se realice sin mas interacción que la contraseña de su certificado.

El problema lo he tenido en dos sitios:

  • en el Applet de @firma. No puede firmar ficheros de mas de 2MB.
  • en el Tomcat, era incapaz de subir a traves del formulario ficheros de mas de 2MB.

Para estos dos problemas finalmente después de muchas horas de trabajo, he encontrado dos soluciones:

  • sustituir el Applet por el MiniApplet de @firma. Esta es una version mas reciente, mas rápida y eficiente, del cual no se cual es el limite máximo de ficheros a firmar, pero es bastante mas elevado. Creo que leí que estaba entorno a los 64MB. Pero seguro que depende de la capacidad de memoria y de procesamiento del ordenador cliente. El cambio no es nada doloroso.
  • en Tomcat y en la mayoría de servidores existe un máximo tanto para el GET como para el POST. Si bien el estándar no pone limites. En los navegadores, excluyendo Internet Explorer, para el POST no han puesto limite, pero si para el GET. En ambos casos se pretender prevenir un ataque de denegación de servicio.

Limite para el POST: en tomcat por defecto es de 2 MB. Para incrementarlo o dejarlo indefinido se utiliza el parametro: maxPostSize. En el manual de Tomcat, aparece como configurar este parámetro, debe ser configurado en bytes. Dentro de los Connectors.

    <Connector port="8080" protocol="org.apache.coyote.http11.Http11Protocol"
               connectionTimeout="20000"
               maxPostSize="2000000"
               redirectPort="8443" />

Opciones:

  • maxPostSize=”2000000″. 2MB por defecto, no hace falta indicarlo.
  • maxPostSize=”-1″. Ilimitado, también indican que se puede poner maxPostSize=”0″.
  • maxPostSize=”6000000″. 6MB aproximadamente.

¿En que conectores ponerlo?, en todos, en los HTTP y en los AJP que redirijen el trafico.

En el caso de que tengas un cluster de Tomcat’s con un Apache delante, quizás es necesario que indiques también esta capacidad al Apache, en el httpd.conf.

Anuncios
Tomcat subir formularios de mas de 2MB