Solución:
Tienes que modificar dos posibles límites:
En confserver.xml
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxPostSize="67589953" />
En webappsmanagerWEB-INFweb.xml
<multipart-config>
<!-- 52MB max -->
<max-file-size>52428800</max-file-size>
<max-request-size>52428800</max-request-size>
<file-size-threshold>0</file-size-threshold>
</multipart-config>
La sección del conector tiene el parámetro
maxPostSize
El tamaño máximo en bytes del POST que será manejado por el análisis del parámetro de URL del FORM del contenedor. El límite puede desactivarse estableciendo este atributo en un valor menor o igual a 0. Si no se especifica, este atributo se establece en 2097152 (2 megabytes).
Otro límite es:
maxHttpHeaderSize El tamaño máximo del encabezado HTTP de solicitud y respuesta, especificado en bytes. Si no se especifica, este atributo se establece en 4096 (4 KB).
Los encuentras en
$TOMCAT_HOME/conf/server.xml
La respuesta completa
1. El predeterminado (instalación nueva de tomcat)
Cuando descarga Tomcat de su sitio web oficial (de hoy es la versión 9.0.26 de Tomcat), todas las aplicaciones que instaló en Tomcat pueden manejar solicitudes HTTP de tamaño ilimitado, dado que las aplicaciones en sí mismas no tienen límites en el tamaño de la solicitud.
Sin embargo, cuando intenta cargar una aplicación en la aplicación de administrador de tomcat, esa aplicación tiene un límite de archivo de guerra predeterminado de 50 MB. Si está intentando instalar Jenkins, por ejemplo, que tiene 77 MB en la actualidad, fallará.
2. Configure el límite de tamaño de solicitud http por puerto de tomcat
El propio Tomcat tiene un límite de tamaño para cada puerto, y esto se define en confserver.xml
. Esto está controlado por maxPostSize
atributo de cada uno Connector
(Puerto). Si este atributo no existe, que es por defecto, hay sin límite en el tamaño de la solicitud.
Para agregar un límite a un puerto específico, establezca un tamaño de byte para el atributo. Por ejemplo, la siguiente configuración para el puerto 8080 predeterminado limita el tamaño de la solicitud a 200 MB. Esto significa que todas las aplicaciones instaladas en el puerto 8080 ahora tienen el límite de tamaño de 200 MB.
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxPostSize="209715200" />
3. Configurar el límite de tamaño a nivel de la aplicación
Después de superar el límite de tamaño de nivel de puerto, aún puede configurar el límite de nivel de aplicación. Esto también significa que el límite de nivel de aplicación debe ser menor que el límite de nivel de puerto. El límite se puede realizar mediante anotaciones dentro de cada servlet o en el archivo web.xml. Nuevamente, si esto no se establece en absoluto, hay sin límite bajo pedido tamaño.
Para establecer un límite a través de la anotación de Java
@WebServlet("/uploadFiles")
@MultipartConfig( fileSizeThreshold = 0, maxFileSize = 209715200, maxRequestSize = 209715200)
public class FileUploadServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) {
// ...
}
}
Para establecer un límite a través de web.xml
<web-app>
...
<servlet>
...
<multipart-config>
<file-size-threshold>0</file-size-threshold>
<max-file-size>209715200</max-file-size>
<max-request-size>209715200</max-request-size>
</multipart-config>
...
</servlet>
...
</web-app>
4. Apéndice: si ve un error de tamaño de carga de archivo al intentar instalar la aplicación a través de la aplicación Tomcat’s Manager
La aplicación Tomcat’s Manager (por defecto localhost: 8080 / manager) no es más que una aplicación web predeterminada. De forma predeterminada, esa aplicación tiene una web.xml
configuración del límite de solicitud de 50 MB. Para instalar (cargar) una aplicación con un tamaño superior a 50 MB a través de esta aplicación de administrador, debe cambiar el límite. Abra el archivo web.xml de la aplicación de administrador desde webappsmanagerWEB-INFweb.xml
y siga la guía anterior para cambiar el límite de tamaño y finalmente reinicie Tomcat.