Solución:
Obtenga OutputStream de HttpServletResponse y escriba el archivo en él (en este ejemplo, usando IOUtils de Apache Commons)
@RequestMapping(value = "/download", method = RequestMethod.GET)
public void download(HttpServletResponse response) {
...
InputStream inputStream = new FileInputStream(new File(PATH_TO_FILE)); //load the file
IOUtils.copy(inputStream, response.getOutputStream());
response.flushBuffer();
...
}
Asegúrese de usar un try / catch para cerrar las transmisiones en caso de una excepción.
La solución más preferible es usar InputStreamResource con ResponseEntity
. Todo lo que necesitas está listo Content-Length
a mano:
@RequestMapping(value = "/download", method = RequestMethod.GET)
public ResponseEntity download() throws IOException {
String filePath = "PATH_HERE";
InputStream inputStream = new FileInputStream(new File(filePath));
InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
HttpHeaders headers = new HttpHeaders();
headers.setContentLength(Files.size(Paths.get(filePath)));
return new ResponseEntity(inputStreamResource, headers, HttpStatus.OK);
}
Podrías usar el ByteArrayOutputStream
y ByteArrayInputStream
. Ejemplo:
// A ByteArrayOutputStream holds the content in memory
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
// Do stuff with your OutputStream
// To convert it to a byte[] - simply use
final byte[] bytes = outputStream.toByteArray();
// To convert bytes to an InputStream, use a ByteArrayInputStream
ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes);
Puedes hacer lo mismo con otros pares de corrientes. Por ejemplo, los flujos de archivos:
// Create a FileOutputStream
FileOutputStream fos = new FileOutputStream("filename.txt");
// Write contents to file
// Always close the stream, preferably in a try-with-resources block
fos.close();
// The, convert the file contents to an input stream
final InputStream fileInputStream = new FileInputStream("filename.txt");
Y, al usar Spring MVC, definitivamente puede devolver un byte[]
que contiene su archivo. Solo asegúrese de anotar su respuesta con @ResponseBody
. Algo como esto:
@ResponseBody
@RequestMapping("/myurl/{filename:.*}")
public byte[] serveFile(@PathVariable("file"} String file) throws IOException {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
DbxEntry.File downloadedFile = client.getFile("https://foroayuda.es/" + filename, null, outputStream);
return outputStream.toByteArray();
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)