Upload de arquivo - Limitar o tamanho sem precisar fazer o upload completo para o servidor

Pessoal,

será que existe alguma forma de limitar o tamanho do arquivo sem precisar fazer o upload do arquivo inteiro para o servidor?

Como limitar o tamanho do arquivo a ser enviado sem ter que fazer o upload para saber disso!?

        PostMethod filePost = new PostMethod(targetURL);
                
        File file = null;
        OutputStream saida = null;
        
        try {
            file = File.createTempFile("xpto", ".mp3");
            
            saida = new FileOutputStream(file);
            saida.write(audio.getArquivo());
                        
            double tamanhoMB = file.length() / (1024  * 1024);

            int tamanhoLimiteMB = 10;
            

            if(tamanhoMB > 10){
              throw new Exception("Arquivo excedeu o tamanho máximo de: "+tamanhoLimiteMB + "MB");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

O único que conheço é colocando esta tag antes do input do upload no html:

<input type="hidden" name="MAX_FILE_SIZE" value="1048576" />

o value é medido em bytes e é burlável.

sugestão, além do método dentro da tag input que o Cabazzo postou, você pode colocar uma validação server-side. Você faz o upload usando um InputStream e copiando os bytes né? Quando estiver copiando os Bytes, meça o tamanho e quando chegar em 10MB lança uma Exceção e para o upload.

Estou utilizando flex como front end para o Java.

O stream de envio do arquivo é controlado ‘internamente’. Acho que nao tem como ir bufferizando para ver quando chega no tamanho.

Obrigado por enquanto

Mais alguma sugestão?

Mas no Java, como você recebe o arquivo?

[code]PostMethod filePost = new PostMethod(targetURL);

    File file = null;
    OutputStream saida = null;
    
    try {
        file = File.createTempFile(&quot;xpto&quot;, &quot;.mp3&quot;);
        
        saida = new FileOutputStream(file);
        saida.write(audio.getArquivo());
                    
        double tamanhoMB = file.length() / (1024  * 1024);

        int tamanhoLimiteMB = 10;
        

        if(tamanhoMB &gt; 10){
          throw new Exception(&quot;Arquivo excedeu o tamanho máximo de: &quot;+tamanhoLimiteMB + &quot;MB&quot;);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }[/code]

Eu recebo na linha 10:

saida.write(audio.getArquivo());

o método getArquivo retorna um array de bytes que é o arquivo.

mas de onde vem audio?
Normalmente, num upload, o request tem um getInputStream quando o objeto é Multipart, usa esse inputStream com o getBytes para limitar o tamanho:

            byte[] byteFile = new byte[BUFFER_SIZE]; // BUFFER_SIZE é o tamanho do meu buffer. 
            while ((bytes = fis.read(byteFile)) != -1) {   
                fos.write(byteFile, 0, bytes);
                fos.flush();
                md.update((byte)bytes);
            }

Esse fis é o InputStream, fos é o FileOutputStream.

É verdade evefuji. Com esta solucao ai acho que vai dar certo. Eu vou lendo e quando atingir o limite eu gero uma excessão.

Assim que tentar retorno o resultado e adiciono no assunto a palavra [RESOLVIDO]

Valeu ai pelo apoio