Das Java-Backend gibt den Dateistream an das Frontend zurück und implementiert so die Download-Funktion!

Es gibt viele Möglichkeiten, die Datei-Download-Funktion im Front-End zu implementieren. Wir werden sie hier nicht einzeln vorstellen. Hier stellen wir nur die Implementierungsmethode für den Datei-Stream-Download vor.

Da es sich um einen Dateistream handelt, muss er auf jeden Fall eine Reihe von Binärcodes an das Front-End zurückgeben. Als Back-End kann er a zurückgebenOutPutStream

Das Backend kann das in Java bereitgestellte Servlet verwenden HttpServletResponse. Der Kernschritt besteht darin, den Datentyp der Antwort festzulegen, ihn auf einen bestimmten Dateityp oder ein Binärformat sowie den Antwortheader festzulegen und die Datei dann an das Front-End zu ServletOutputStreamsenden Form eines Baches.

Laden Sie den Code direkt hoch

response.setCharacterEncoding("UTF-8");
response.setContentType("application/vnd.ms-excel");

response.setHeader("Content-Disposition", "attachment;filename=example.xls");

erklären

  1. Legen Sie zunächst den Typ der Antwortdaten fest. Legen Sie den Typ der Datei fest, die Sie herunterladen möchten. Wenn Sie nicht wissen, um welchen Typ es sich bei der Datei handelt, aber sicher sind, dass es sich nicht um eine Textdatei handelt, verwenden Sie die folgende Darstellung, damit der Browser dies weiß dass es sich hierbei um Binärdaten handelt application/octet-stream. Diese werden nicht analysiert.

  2. Als nächstes müssen Sie den Antwortheader festlegen:

attachment: Gibt an, dass der Antwortinhalt als Anhang behandelt werden soll und das Browser-Download-Verhalten auslöst.

filename: Der Parameter gibt den Namen der heruntergeladenen Datei an. Der obige Code veranlasst den Browser, eine example.xls-Datei herunterzuladen.

Hier ist ein Link für Sie, der gängige MIME-Typen und eine Liste gängiger MIME-Typen enthält , z. B. das Bild unten, PNG-Typ, PDF, PPT usw.

Anschließend wird es in Form eines Streams an das Frontend gesendet.

ServletOutputStream outputStream = response.getOutputStream();
checkInfo.write(outputStream);
outputStream.flush();

Auf diese Weise übergibt das Backend eine Datei in Form eines Dateistreams an das Frontend und eine vom Frontend initiierte Anfrage löst das Download-Verhalten des Browsers aus.

Unten finden Sie den vollständigen Code

@GetMapping("/output/{classId}/{checkName}")
    public void checkToExcel(@PathVariable String checkName, @PathVariable String classId, HttpServletResponse response) {
        HSSFWorkbook checkInfo = checkExcelService.getCheckInfo(classId, checkName);
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("UTF-8");
        response.setHeader("Content-Disposition", "attachment;filename=" + checkName + "签到统计表.xls");
        try {
            ServletOutputStream outputStream = response.getOutputStream();
            checkInfo.write(outputStream);
            outputStream.flush();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

Ich weiß nicht, ob irgendwelche Freunde so sind wie ich. Der Rückgabewert einer Methode wird als Stream geschrieben (zum Beispiel ByteArrayOutputStream). Das ist falsch.

Als ich dieses Programm zuvor geschrieben habe, habe ich einen Stream an das Frontend zurückgegeben. Infolgedessen hatte die heruntergeladene Datei immer das falsche Format und der vom Browser empfangene Antwortdatentyp war immer JSON. Der Grund dafür war, dass die Antwort war Wird nicht zum Senden des Streams verwendet und muss daher zum Abrufen des Streams verwendet response.getOutputStream()und dann geleert werden, damit das Front-End tatsächlich den Binärdatei-Stream empfängt.

Je suppose que tu aimes

Origine blog.csdn.net/weixin_54542328/article/details/132568019
conseillé
Classement