Rumah > Java > javaTutorial > Cara Muat Turun Fail daripada Perkhidmatan Spring Boot REST: Mengapa InputStreamReader Gagal dan Cara Membetulkannya dengan InputStreamResource atau ByteArrayResource?

Cara Muat Turun Fail daripada Perkhidmatan Spring Boot REST: Mengapa InputStreamReader Gagal dan Cara Membetulkannya dengan InputStreamResource atau ByteArrayResource?

Susan Sarandon
Lepaskan: 2024-11-02 07:37:02
asal
364 orang telah melayarinya

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

Memuat turun Fail daripada Perkhidmatan Spring Boot REST

Artikel ini menangani isu memuat turun fail daripada perkhidmatan Spring Boot REST dengan berkesan. Kod yang disediakan di bawah cuba memudahkan fungsi ini:

<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>
Salin selepas log masuk

Walau bagaimanapun, apabila cuba memuat turun fail melalui penyemak imbas, proses itu dimulakan tetapi akhirnya gagal. Pilihan berikut boleh diterokai untuk menangani isu ini:

Pilihan 1: Menggunakan Sumber InputStreamResource

Sumber InputStreamResource boleh digunakan untuk mewakili InputStream. Ia harus dipertimbangkan apabila pelaksanaan Sumber khusus lain tidak berkenaan.

<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>
Salin selepas log masuk

Pilihan 2: Menggunakan ByteArrayResource

Seperti yang disyorkan oleh dokumentasi untuk InputStreamResource, ByteArrayResource juga boleh bekerja.

<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>
Salin selepas log masuk

Atas ialah kandungan terperinci Cara Muat Turun Fail daripada Perkhidmatan Spring Boot REST: Mengapa InputStreamReader Gagal dan Cara Membetulkannya dengan InputStreamResource atau ByteArrayResource?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan