Como tratar upload acima do limite?
06/02/2018 19:34
0
Boa noite pessoal! Estou usando o Grails 3, porém não estou conseguindo tratar quando o upload do arquivo supera o tamanho que configurei no application.yml.

Encontrei um código, porém não funcionou.

?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(), new LinkedHashMap(), new LinkedHashMap());
}
}
}


Alguém pode me dar uma luz?
Tags: Grails


0
Este é razoavelmente simples de resolver: trata-se de uma configuração que você define no próprio arquivo application.yml, tal como no exemplo a seguir:


grails:
    controllers:
        upload:
             maxFileSize: 104857600
             maxRequestSize: 1048575600


Por ali você define qual o tamanho máximo de upload e requisições.


0
Olá...
O problema não é essa configuração. É a exception que é lançada ao extrapolar o tamanho máximo. Eu não consigo capturar ela com um simples try...catch no controller. Ela acontece em um nível superior. 
Obrigado
14/02/2018 12:42


0
Olá..

Bom se vc esta usando um try catch no controller ja comecou errado,   eu faria um interceptor para tratar isso. but ... esse link aqui acho que deve te ajudar https://stackoverflow.com/questions/32867386/how-to-handle-maximum-file-size-exception-in-spring-boot
14/02/2018 13:13


0
Cara... Você parece que sequer tentou entender o que eu estou falando. Foi só um exemplo a forma de execução com o try..catch. Tanto é que na primeira mensagem eu já deixei um exemplo de um Resolver para tratar o problema injetando uma propriedade no request. 

Mesmo assim, obrigado pelo link. Vai ser útil.
14/02/2018 15:43


0
Oi Ricardo,
antes de mais nada, é importante sermos cordiais: as pessoas estão te ajudando de forma puramente voluntária, então comecemos por aí.
Agora, voltando ao problema.

Há algumas soluções para isto: algo que você pode fazer é primeiro verificar o tamanho do conteúdo que está sendo enviado para o seu controlador e na sequência realizar o direcioamento. Algo assim:

def length = request.getFile('arquivo').getContentLength()
if (length > tamanho_maximo) {
   // tratar aqui
}


Isto irá tratar a esmagadora maioria dos problemas: pode ser que alguém esteja falsificando o tamanho do upload, mas isto é muito raro e difícil. Nestes casos, ainda há algo que você pode fazer: você pode envolver apenas a parte que lida com a obtenção do conteúdo do upload em um bloco try catch, e aí tratar apenas esta situação, mas creio que a solução que passei acima será mais que suficiente.


1
Me desculpe Kico, estou muito estressado ultimamente. E esse erro está me deixando com os cabelos brancos. 

Implementei da forma que você me orientou. Os testes passaram, mas vou ver uma forma de refatorar mais tarde. Por enquanto vai assim mesmo.

Obrigado e, mais uma vez, desculpe-me.
15/02/2018 16:56


0
Ricardo, esquenta não.

Agora, é estranho este seu erro não parar em um try... catch viu.
Já tentou apelar e colocar algo como

try {
  // seu códgio aqui
} catch (Throwable t) {
   // assim pega qualquer tipo de erro
}



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto