Como você restringir o tamanho de um arquivo que está sendo carregado com JavaScript (ou Java) sem transferir o arquivo inteiro?

StackOverflow https://stackoverflow.com/questions/158149

Pergunta

Existe uma forma de validar no navegador do lado do cliente se o tamanho de um arquivo que está sendo carregado a partir de uma página JSP é sobre um conjunto limite de tamanho sem forçar o usuário fazer o upload do arquivo inteiro apenas para descobrir que era muito grande?

Gostaria de ficar longe de quaisquer controles de propriedade ou técnicas como Flash ou ActiveX, se possível.

Obrigado!

Foi útil?

Solução

Esta não é uma solução perfeita, mas se você verificar o Content-Length HTTP cabeçalho com request.getHeader("Content-Length") então você pode optar por não transferir o arquivo inteiro.

A título de explicação, um arquivo muito grande não vai ser transferido de uma só vez. Você teria que realmente abrir um fluxo que representa o bloco de dados POST e lê-lo para toda a coisa a ser transferidos.

Por outro lado, se você está preocupado com ataques de negação de serviço, então você não pode realmente confiar o cabeçalho Content-Length, porque pode ser facilmente forjado. Neste caso, você deve definir um limite e transmitir uma transferência desse arquivo, parando assim que você excedeu esse limite.

Outras dicas

Sugiro que você reconsidere a decisão Flash e dê uma olhada no YUI Uploader, aqui:

http://developer.yahoo.com/yui/uploader/

Entre outras coisas, o evento fileSelect irá dizer-lhe o tamanho do arquivo selecionado em bytes imediatamente após ser selecionada, mas antes de ser carregado, então você vai ser capaz de restringir em conformidade.

Com JSP ou PHP você não será capaz de restringir o tamanho do arquivo, porque sua página não irá receber o pedido até o carregamento já aconteceu. Nesse ponto, você pode decidir não para salvar o arquivo, mas que pode ser tarde demais.

Existem algumas soluções Java lá fora, por exemplo, MyUploader ou Hermes . Alguns até mesmo suportar vários upload de arquivos e retomar uploads parciais, e alguns também dar-lhe o código-fonte. Você também pode escrever o seu próprio, mas terá de ser um applet assinado para funcionar porque ele precisa para acessar o sistema de arquivos local. Se você estiver usando o Apache como seu servidor web você vai precisar de bastante RAM em sua máquina para se ajustar ao tamanho do arquivo inteiro na memória de todos os arquivos que estão sendo carregados em um determinado momento.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top