Heim > Java > javaLernprogramm > So laden Sie eine Datei von einem Spring Boot REST-Dienst herunter: Warum schlägt InputStreamReader fehl und wie lässt sich das Problem mit InputStreamResource oder ByteArrayResource beheben?

So laden Sie eine Datei von einem Spring Boot REST-Dienst herunter: Warum schlägt InputStreamReader fehl und wie lässt sich das Problem mit InputStreamResource oder ByteArrayResource beheben?

Susan Sarandon
Freigeben: 2024-11-02 07:37:02
Original
371 Leute haben es durchsucht

How to Download a File from a Spring Boot REST Service: Why InputStreamReader Fails and How to Fix It with InputStreamResource or ByteArrayResource?

Herunterladen einer Datei vom Spring Boot REST-Dienst

Dieser Artikel befasst sich mit dem Problem des effektiven Herunterladens einer Datei von einem Spring Boot REST-Dienst. Der unten bereitgestellte Code versucht, diese Funktionalität zu ermöglichen:

<code class="java">@RequestMapping(path="/downloadFile",method=RequestMethod.GET)
@Consumes(MediaType.APPLICATION_JSON_VALUE)
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));
        System.out.println("The length of the file is : "+file2Upload.length());

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

Beim Versuch, die Datei über einen Browser herunterzuladen, wird der Vorgang zwar gestartet, schlägt jedoch letztendlich fehl. Die folgenden Optionen können untersucht werden, um dieses Problem zu beheben:

Option 1: Verwendung einer InputStreamResource

Eine InputStreamResource kann zur Darstellung eines InputStreams verwendet werden. Dies sollte in Betracht gezogen werden, wenn andere spezifische Ressourcenimplementierungen nicht anwendbar sind.

<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>
Nach dem Login kopieren

Option 2: Verwendung einer ByteArrayResource

Wie in der Dokumentation für InputStreamResource empfohlen, eine ByteArrayResource kann auch angestellt werden.

<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>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSo laden Sie eine Datei von einem Spring Boot REST-Dienst herunter: Warum schlägt InputStreamReader fehl und wie lässt sich das Problem mit InputStreamResource oder ByteArrayResource beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage