Aquí tienes el código para realizar el almacenamiento temporal de un fichero en local, y la posterior construcción del mismo lanzándosela al usuario.
Este método sirve para servir recursos de ips privadas que no son accesibles desde Internet.
Código:
private void servirRecurso(HttpServletResponse response, String url) throws IOException {
InputStream in = null;
OutputStream out = null;
try {
URL urlObjeto = new URL(url);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + urlObjeto.getFile());
URLConnection connection = urlObjeto.openConnection();
in = connection.getInputStream(); //conectando para descargar
out = new DataOutputStream(response.getOutputStream());
byte[] buffer = new byte[BUFFER_SIZE];
int sizeRead = 0;
while ((sizeRead = in.read(buffer)) >= 0) { //leyendo del host
out.write(buffer, 0, sizeRead); //escribiendo para el navegador
}
} finally {
in.close(); // y cerrando
out.close(); // todo
}
}
Espero que te sirva de ayuda.