Heim  >  Artikel  >  Java  >  Wie lade ich Dateien erfolgreich von einem Spring Boot REST-Dienst herunter?

Wie lade ich Dateien erfolgreich von einem Spring Boot REST-Dienst herunter?

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

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

Dateien von einem Spring Boot-REST-Dienst herunterladen

In Spring Boot können Sie einen REST-Dienst zum Herunterladen von Dateien verwenden. Es tritt jedoch ein häufiges Problem auf, wenn der Download fehlschlägt.

Hier ist eine Dienstimplementierung, bei der dieser Fehler auftritt:

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

Um dieses Problem zu beheben, ziehen Sie die folgenden Lösungen in Betracht:

Option 1: Verwenden einer InputStreamResource

Verwenden Sie eine InputStreamResource, um den InputStream der Datei zu umschließen:

<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: Verwenden einer ByteArrayResource

Wie in der InputStreamResource-Dokumentation vorgeschlagen, kann die Verwendung einer ByteArrayResource effizienter sein:

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

Durch die Integration dieser Lösungen sollten Sie in der Lage sein, Dateien erfolgreich von Ihrem Spring Boot REST-Dienst herunterzuladen.

Das obige ist der detaillierte Inhalt vonWie lade ich Dateien erfolgreich von einem Spring Boot REST-Dienst herunter?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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