Home  >  Article  >  Java  >  How to Successfully Download Files from a Spring Boot REST Service?

How to Successfully Download Files from a Spring Boot REST Service?

Barbara Streisand
Barbara StreisandOriginal
2024-10-28 07:53:02919browse

How to Successfully Download Files from a Spring Boot REST Service?

Downloading Files from a Spring Boot REST Service

In Spring Boot, you can utilize a REST service to download files. However, a common issue arises when downloading fails.

Here's a service implementation that encounters this error:

<code class="java">@RequestMapping(path="/downloadFile",method=RequestMethod.GET)
public  ResponseEntity<InputStreamReader> downloadDocument(
                String acquistionId,
                String fileType,
                Integer expressVfId) throws IOException {
    // Code for file acquisition...

    HttpHeaders headers = new HttpHeaders();
    headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
    headers.add("Pragma", "no-cache");
    headers.add("Expires", "0");
    InputStreamReader i = new InputStreamReader(new FileInputStream(file2Upload));

    return ResponseEntity.ok().headers(headers).contentLength(file2Upload.length())
            .contentType(MediaType.parseMediaType("application/octet-stream"))
            .body(i);
}</code>

To resolve this issue, consider the following solutions:

Option 1: Using an InputStreamResource

Use an InputStreamResource to wrap the InputStream of the file:

<code class="java">InputStreamResource resource = new InputStreamResource(new FileInputStream(file));

return ResponseEntity.ok()
        .headers(headers)
        .contentLength(file.length())
        .contentType(MediaType.APPLICATION_OCTET_STREAM)
        .body(resource);</code>

Option 2: Using a ByteArrayResource

As suggested by the InputStreamResource documentation, using a ByteArrayResource may be more efficient:

<code class="java">Path path = Paths.get(file.getAbsolutePath());
ByteArrayResource resource = new ByteArrayResource(Files.readAllBytes(path));

return ResponseEntity.ok()
        .headers(headers)
        .contentLength(file.length())
        .contentType(MediaType.APPLICATION_OCTET_STREAM)
        .body(resource);</code>

By incorporating these solutions, you should be able to download files successfully from your Spring Boot REST service.

The above is the detailed content of How to Successfully Download Files from a Spring Boot REST Service?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn