Maison  >  Article  >  Java  >  Pourquoi le téléchargement de mon service Spring Boot REST échoue-t-il, alors que le navigateur lance le processus ?

Pourquoi le téléchargement de mon service Spring Boot REST échoue-t-il, alors que le navigateur lance le processus ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-27 17:47:31162parcourir

 Why is my Spring Boot REST service download failing, despite the browser initiating the process?

Télécharger un fichier à partir du service Spring Boot Rest : dépannage des échecs de téléchargement

Cet article traite d'un problème rencontré lors de la tentative de téléchargement d'un fichier via un Service REST de démarrage printanier. Malgré le lancement du téléchargement dans le navigateur, le processus échoue systématiquement. Voici une analyse du problème et des solutions potentielles :

La méthode de service :

Le code fourni démontre la méthode de service responsable du téléchargement du fichier :

<code class="java">@RequestMapping(path="/downloadFile",method=RequestMethod.GET)
public ResponseEntity<InputStreamReader> downloadDocument(String acquistionId, String fileType, Integer expressVfId) throws IOException {
    File file2Upload = new File("C:\Users\admin\Desktop\bkp\1.rtf");
    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>

Option 1 : Utiliser un InputStreamResource

Le code fourni crée un InputStreamReader à partir d'un fichier et le renvoie avec un ResponseEntity. Cependant, il est recommandé d'utiliser un InputStreamResource de la bibliothèque spring-core. Cette implémentation offre une ressource pour les flux, garantissant une gestion appropriée du flux pendant le processus de téléchargement.

<code class="java">@RequestMapping(path = "/download", method = RequestMethod.GET)
public ResponseEntity<Resource> download(String param) throws IOException {
    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 une ByteArrayResource

La documentation Spring suggère en utilisant un ByteArrayResource au lieu d'un InputStreamResource. L'utilisation de ce type de ressource implique de lire l'intégralité du fichier dans un tableau d'octets et de créer une ressource à partir de celui-ci. Cette approche peut être avantageuse dans certains scénarios, tels que l'amélioration des performances pour les petits fichiers.

<code class="java">@RequestMapping(path = "/download", method = RequestMethod.GET)
public ResponseEntity<Resource> download(String param) throws IOException {
    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 implémentant l'une ou l'autre de ces options, le problème des échecs de téléchargement devrait être résolu, permettant ainsi des téléchargements de fichiers transparents via Spring Boot. Service REST.

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