assim
eu tenho um sistema de upload que envia os arquivos para uma pasta
por exemplo
/mnt/files
essa pasta não é publica nao pode ser acessada pelo navegador
eu precisaria de um sistema que copiasse o arquivo desta pasta e enviasse para o navegador entende
FileInputStream input = new FileInputStream("ARQUIVO A SER LIDO DO SERVER");
byte[] buffer = new byte[1024]; // le o arquivo a cada 1kb
ServletOutputStream out = response.getOutputStream();
int read = 0;
while((read = input.read(buffer)) != -1){
out.write(buffer);
out.flush();
}
out.close();
}[/code]
Olá galera. Continuando este tópico, fiz a implementação do código, só que ao fazer o download de arquivos maiores de 400MB, o heap da JVM estoura rapidamente. Estou realizando um trabalho em que é necessário fazer download de arquivos do servidor de até 2GB e não apenas até 400MB.
Alguém pode ajudar? Segue o código:
HttpServletResponse response =(HttpServletResponse) context.getResponse();
response.setHeader("Content-Disposition","attachment;filename=\"" + nomeDoArquivoGeradoParaDownload + "\"");
response.setContentLength((int) filez.length());
response.setContentType("application/download");
try {
FileInputStream fis = new FileInputStream(filez);
ServletOutputStream out = response.getOutputStream();
FileInputStream in = new FileInputStream(filez);
byte[] buffer = new byte[1024];
int read = 0;
while((read = in.read(buffer)) != -1){
out.write(buffer);
out.flush();
}
out.close();
} catch (IOException e) {
System.out.print("Erro no envio do arquivo");
e.printStackTrace();
}
Caused by: java.lang.OutOfMemoryError: Java heap space
at org.ajax4jsf.io.ByteBuffer.<init>(ByteBuffer.java:54)
at org.ajax4jsf.io.ByteBuffer.append(ByteBuffer.java:112)
at org.ajax4jsf.io.FastBufferOutputStream.write(FastBufferOutputStream.java:92)
at org.ajax4jsf.webapp.FilterServletResponseWrapper$ByteArrayServletOutputStream.write(FilterServletResponseWrapper.java:257)