labbati
Dezembro 7, 2011, 2:29pm
#1
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();
}
Cabazzo
Dezembro 7, 2011, 3:18pm
#2
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.
evefuji
Dezembro 7, 2011, 4:16pm
#3
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.
labbati
Dezembro 8, 2011, 1:06pm
#4
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?
evefuji
Dezembro 8, 2011, 1:10pm
#5
Mas no Java, como você recebe o arquivo?
labbati
Dezembro 8, 2011, 8:30pm
#6
[code]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();
}[/code]
Eu recebo na linha 10:
saida.write(audio.getArquivo());
o método getArquivo retorna um array de bytes que é o arquivo.
evefuji
Dezembro 8, 2011, 8:34pm
#7
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.
labbati
Dezembro 9, 2011, 2:19pm
#8
É 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