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

3

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 envie um arquivo de 10 GB para o meu servidor. O que eu descobri foi que a maioria das abordagens para calcular o tamanho é feita depois que o arquivo já está 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 configuração a seguir, na abordagem codificada ou 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:

The @MultipartConfig annotation supports the following optional attributes:

location: An absolute path to a directory on the file system. The location attribute does not support a path relative to the application context. This location is used to store files temporarily while the parts are processed or when the size of the file exceeds the specified fileSizeThreshold setting. The default location is "".

fileSizeThreshold: The file size in bytes after which the file will be temporarily stored on disk. The default size is 0 bytes.

MaxFileSize: The maximum size allowed for uploaded files, in bytes. If the size of any uploaded file is greater than this size, the web container will throw an exception (IllegalStateException). The default size is unlimited.

maxRequestSize: The maximum size allowed for a multipart/form-data request, in bytes. The web container will throw an exception if the overall size of all uploaded files exceeds this threshold. The default size is unlimited.

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>

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

    
por Alex 27.12.2013 / 16:30

1 resposta

1

O MaxFileSize será calculado depois que todo o arquivo já tiver sido enviado. Você pode fazer o upload de um arquivo (tamanho de 1GB) em seu aplicativo da web e, em seguida, perceberá o que realmente acontece. Então, confiar no Tomcat não faria sentido. Fazer o mesmo trabalho no Servlet é possível, mas quando o contador atinge o MaxFileSize como você pode desconectar a conexão HTTP subjacente? Eu acho que você não tem jeito. O protocolo HTTP é unidirecional, então você também não pode dizer ao navegador para cancelar o longo post no tempo. A única coisa que você pode fazer é quando seu contador atinge o limite apenas 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.

    
por 30.12.2014 / 17:38