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.
Pruebe esto https://github.com/zyro23/grails-core-668/blob/master/grails-app/conf/application.yml
carga: maxFileSize: 9999999999 maxRequestSize: 9999999999
https://github.com/grails/grails-core/issues/668
grails.controllers.upload.maxFileSize
y / o
grails.controllers.upload.maxRequestSize
propiedades / configuraciones config
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).