Configuração do Apache Tomcat Tamanho máximo de upload de arquivo

Configuração do Apache Tomcat Tamanho máximo de upload de arquivo

Estou implementando um aplicativo da web Grails/Groovy, quero limitar o tamanho de upload do arquivo do usuário, não quero que alguém carregue um arquivo de 10 GB para o meu servidor. O que descobri foi que a maioria das abordagens para calcular o tamanho é feita depois que o arquivo já foi carregado. E se alguém colocar 10 perfis e carregar 10 arquivos de até 10 GB? Isso pode esgotar o servidor e ocupar muito espaço no disco do servidor. Então, estou tentando evitar isso.

Eu descobri que o Apache Tomcat permite a seguinte configuração, na abordagem codificada ou de anotação. Não tenho certeza se o tamanho máximo do arquivo é calculado durante o processo de upload ou após o upload do arquivo para um local temporário. A documentação indica o seguinte:

A anotação @MultipartConfig suporta os seguintes atributos opcionais:

localização: um caminho absoluto para um diretório no sistema de arquivos. O atributo location não suporta um caminho relativo ao contexto do aplicativo. Este local é usado para armazenar arquivos temporariamente enquanto as peças são processadas ou quando o tamanho do arquivo excede a configuração fileSizeThreshold especificada. O local padrão é "".

fileSizeThreshold: O tamanho do arquivo em bytes após o qual o arquivo será armazenado temporariamente no disco. O tamanho padrão é 0 bytes.

MaxFileSize: O tamanho máximo permitido para arquivos carregados, em bytes. Se o tamanho de qualquer arquivo carregado for maior que esse tamanho, o contêiner da web lançará uma exceção (IllegalStateException). O tamanho padrão é ilimitado.

maxRequestSize: o tamanho máximo permitido para uma solicitação multipart/form-data, em bytes. O contêiner da web lançará uma exceção se o tamanho geral de todos os arquivos enviados exceder esse limite. O tamanho padrão é ilimitado.

abordagem de anotação:

@MultipartConfig(location="/tmp", fileSizeThreshold=1024*1024, 
    maxFileSize=1024*1024*5, maxRequestSize=1024*1024*5*5)

e aqui está o valor codificado:

<multipart-config>
<!– 50MB max –>
<max-file-size>52428800</max-file-size>
<max-request-size>52428800</max-request-size>
<file-size-threshold>0</file-size-threshold>
</multipart-config>

Agradeço se alguém puder esclarecer se o MaxFileSize é calculado durante o processo de upload.

Responder1

O MaxFileSize será calculado após o upload de todo o arquivo. Você pode fazer upload de um arquivo (tamanho de 1 GB) em seu aplicativo da web e perceberá o que realmente acontece. Portanto, confiar no Tomcat não faria sentido. É possível fazer o mesmo trabalho no Servlet, mas quando seu contador atinge MaxFileSize, como você pode desconectar a conexão HTTP subjacente? Acho que você não tem jeito. O protocolo HTTP é unidirecional, então você também não pode dizer ao navegador para cancelar a postagem longa a tempo. A única coisa que você pode fazer é quando o contador atingir o limite, simplesmente ignorar os bytes de acompanhamento do fluxo de entrada para proteger o espaço em disco até que a transmissão do arquivo seja concluída.

informação relacionada