springsecurity org homepage grails spring-boot grails-3.0

org - Grails3 carga de archivo maxFileSize límite



install spring security grails (5)

Estoy tratando de actualizar el archivo upload maxFileSize limit en Grails 3 y probé la configuración en src/main/resources/application.properties , application.groovy y application.yml , pero todavía está lanzando la excepción

Class org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException Message the request was rejected because its size (154738) exceeds the configured maximum (128000)

¿Alguna ayuda sobre dónde y qué configurar en una aplicación Grails 3?


Tampoco tuve suerte tratando de establecer nuevos valores máximos en application.properties o application.yml.

Lo que sí funciona es utilizar una definición de bean en conf / spring / resources.groovy:

import javax.servlet.MultipartConfigElement // Place your Spring DSL code here beans = { multipartResolver(org.springframework.web.multipart.commons.CommonsMultipartResolver){ maxInMemorySize=1000000 maxUploadSize=100000000 //uploadTempDir="/tmp" } }


Parte del problema es establecer un tamaño máximo de archivo. El otro problema es manejar ese error con gracia.

Aquí está mi definición de frijol:

multipartResolver(MyMultipartResolver) { maxUploadSize = (5*1024*1024) }

Aquí está mi implementación:

public class MyMultipartResolver extends CommonsMultipartResolver { static final String FILE_SIZE_EXCEEDED_ERROR = "fileSizeExceeded"; public MultipartHttpServletRequest resolveMultipart(HttpServletRequest request) { try { return super.resolveMultipart(request); } catch (MaxUploadSizeExceededException e) { request.setAttribute(FILE_SIZE_EXCEEDED_ERROR, true); return new DefaultMultipartHttpServletRequest(request, new LinkedMultiValueMap<String, MultipartFile>(), new LinkedHashMap<String, String[]>(), new LinkedHashMap<String, String>()); } } }

La idea es verificar el atributo de solicitud en su controlador o un filtro para determinar si el archivo era demasiado grande.




La solución es establecer los límites maxFileSize y maxRequestSize dentro de su archivo application.yml . Asegúrate de tener algo como esto:

grails: controllers: upload: maxFileSize: 2000000 maxRequestSize: 2000000

Reemplace 2000000 con la cantidad de bytes máximos que desea para cargar un archivo y para toda la solicitud. Grails 3 por defecto es 128000 (~ 128KB) .

Preguntas más frecuentes

1. ¿Cómo convertir de MB a bytes?

YOUR_MAX_SIZE_IN_MB * 1024 * 1024 = BYTES

Por ejemplo, convierte 5 MB en bytes

5 * 1024 * 1024 = **5242880** bytes

2. Seguridad

Como cita de OWASP

Limite el tamaño del archivo a un valor máximo para evitar ataques de denegación de servicio

Por lo tanto, existen estos límites para evitar ataques DoS y para hacer cumplir el rendimiento general de la aplicación (tamaño de solicitud más grande == más memoria utilizada desde el servidor).

3. ¿Cuál es el valor correcto para maxFileSize y maxRequestSize ?

Depende del tipo de aplicación, pero generalmente es una mala idea mantenerlos demasiado altos. Si realmente necesita cargar archivos grandes, probablemente debería desarrollar (o usar) un servicio dedicado (y separado).