Maison  >  Article  >  Java  >  Comment réussir à télécharger des fichiers à partir d'un service REST Spring Boot ?

Comment réussir à télécharger des fichiers à partir d'un service REST Spring Boot ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-28 07:53:021005parcourir

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

Téléchargement de fichiers à partir d'un service REST Spring Boot

Dans Spring Boot, vous pouvez utiliser un service REST pour télécharger des fichiers. Cependant, un problème courant survient lorsque le téléchargement échoue.

Voici une implémentation de service qui rencontre cette erreur :

<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>

Pour résoudre ce problème, envisagez les solutions suivantes :

Option 1 : Utiliser un InputStreamResource

Utiliser un InputStreamResource pour envelopper le InputStream du fichier :

<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 : Utiliser un ByteArrayResource

Comme suggéré par la documentation InputStreamResource, l'utilisation d'un ByteArrayResource peut être plus efficace :

<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>

En incorporant ces solutions, vous devriez pouvoir télécharger avec succès des fichiers à partir de votre service REST Spring Boot.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn