Upload de arquivos - resolvido

25 respostas Resolvido
guilhermebhte

No endpoint está retornando este erro:

  1. detail: “Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: io.undertow.server.handlers.form.MultiPartParserDefinition$FileTooLargeException: UT000054: The maximum size 1048576 for an individual file in a multipart request was exceeded”

No yml está assim:

spring:
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 10MB

O arquivo é de 5MB.

O sistema está dentro do portainer - https://www.portainer.io/

Tenho que fazer mais alguma configuração ?

25 Respostas

Jonathan_Medeiros

Se não me engano essa configuração é para o spring com versão < 2, para versões > 2 acho que é nesse formato aqui:

spring:
  http:
    multipart:
      max-file-size: 10MB
      max-request-size: 10MB

Muda de servlet para http, faça um teste no seu ambiente aí!

guilhermebhte

Já retorno.

grato

guilhermebhte

Não funcionou. Mesmo erro.

  1. detail: “Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: io.undertow.server.handlers.form.MultiPartParserDefinition$FileTooLargeException: UT000054: The maximum size 1048576 for an individual file in a multipart request was exceeded”

Utilizo jhipster

Jonathan_Medeiros

Muito estranho, parece que ele não compreende a configuração! :confused:

Nunca utilizei o jhipster, sempre utilizei o spring initializr.

Esse jhipster trás algum tipo de benefício?

guilhermebhte

Pois é

jhipster - Ele ajudou em varias configurações, segurança, usuarios, configuração entre outras coisas …

Lucas_Camara

Tava pesquisando, parece que a galera cria um bean para jogar essas confgurações de multipart.

@Configuration
public class UndertowConfiguration {

    @Value("${spring.http.multipart.max-file-size:10}")
    private long maxFileSize;

    @Bean(name = "multipartResolver")
    public MultipartResolver multipartResolver() {
        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
        multipartResolver.setDefaultEncoding("utf-8");
        multipartResolver.setResolveLazily(true);
        multipartResolver.setMaxUploadSize(1024*1024*maxFileSize);
        multipartResolver.setMaxUploadSizePerFile(1024*1024*maxFileSize);
        return multipartResolver;
    }
}
guilhermebhte

Vou testar

guilhermebhte

Nada viu.

Jonathan_Medeiros

Cria um projeto com o Spring initializr, implementa o upload de arquivos basicão e faz um teste, se funcionar corretamente o problema é com o jhipster.

guilhermebhte

Entendi. Mas eu acho que o problema é com ele mesmo. Mas tenho que tentar resolver com ele. Valeu
Reconstruir todo o projeto, não dá

Jonathan_Medeiros

A ideia que disse nem é reconstruir o projeto todo, somente fazer um teste mesmo!

Qualquer coisa habilita o nível de log’s DEBUG e veja se ele apresenta alguma informação relevante quando você tenta fazer o upload do arquivo.

guilhermebhte

A tá. Mas eu sei que funciona. Já fiz o teste. Só com o spring boot.

Qualquer coisa habilita o nível de log’s DEBUG e veja se ele apresenta alguma informação relevante quando você tenta fazer o upload do arquivo.

Nada alem disso:

detail: “Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: io.undertow.server.handlers.form.MultiPartParserDefinition$FileTooLargeException: UT000054: The maximum size 1048576 for an individual file in a multipart request was exceeded”

O problema que local não dá este erro, pelo menos até o momento.

Não sei se é algo no portainer, também.

Jonathan_Medeiros

Tu está usando o embedded tomcat ou alterou para algum outro?

guilhermebhte

embedded

Jonathan_Medeiros

Tenta fazer a seguinte configuração e faz um teste:

@Configuration
public class ServletContainerCustomizerConfig {
      @Bean 
	  public EmbeddedServletContainerCustomizer containerCustomizer() throws Exception {
	      
	      return (ConfigurableEmbeddedServletContainer container) -> {
	 
	          if (container instanceof TomcatEmbeddedServletContainerFactory) {
	 
	              TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container;
	              tomcat.addConnectorCustomizers(
	                      (connector) -> {
	                    	  connector.setMaxPostSize(10000000); //10MB
	                      }
	              );
	          }
	      };
	  }
}
Lucas_Camara

Mas ele está usando o undertow e não o tomcat como servlet container (bom, pelo menos foi o que entendi)

Jonathan_Medeiros

Falha minha, agora que observei o undertown no log, penssei que fosse o tomcat pq eu havia perguntado e ele confirmou.

guilhermebhte

Foi mal. Achei que era

Lucas_Camara

@guilhermebhte, talvez tu possa testar com o código do @Jonathan_Medeiros, mas usando a classe UndertowEmbeddedServletContainerFactory no lugar.

guilhermebhte

Acredito que funcionou eu colocando este arquivo:

application.properties
spring.servlet.multipart.max-file-size=15MB
spring.servlet.multipart.max-request-size=15MB

Pois consegui importar um arquivo de 5 megas que antes não estava conseguindo.

Só que com arquivos de 10 megas mostra esta mensagem Handler dispatch failed; nested exception is java.lang.OutOfMemoryError: Java heap space,

Seria aumentar a memoria do servidor ?

Hoje ele tem g1-small (1 vCPUj, 1,7 GB de memória)

O Google já está aconselhando a aumentar para custom (1 vCPUj, 2,75 GB de memória) Recomendado

guilhermebhte

Um arquivo de 6 mb
um arquivo de 3 mb

Mas um de 10 mg, parece que dá erro de memória.
erro

Jonathan_Medeiros

Nesse caso aqui você precisa ceder um pouco mais de memória, imagino que pelo tamanho do arquivo exija um consumo maior.

guilhermebhte

Isso é na configuração do JAVA do servidor ?
Se sim aonde altero ?

Jonathan_Medeiros

Na inicialização da sua aplicação você consegue fornecer alguns argumentos sobre a capacidade de memória, que por consequência precisa estar disponível no ambiente em que ela esteja, servidor, container e etc…

Um exemplo de como são os argumentos: https://stackoverflow.com/questions/14763079/what-are-the-xms-and-xmx-parameters-when-starting-jvm

guilhermebhte
Solucao aceita

Aumentei a memoria da JVM

application.properties
spring.servlet.multipart.max-file-size=15MB
spring.servlet.multipart.max-request-size=15MB

Aumentei a memoria do servidor de 1,5 gb para 2,5

Mudei isso na configuração

-Xms256m
-Xmx2g

Obrigado @Jonathan_Medeiros e @Lucas_Camara

Criado 31 de julho de 2020
Ultima resposta 4 de ago. de 2020
Respostas 25
Participantes 3