Rumah  >  Artikel  >  Java  >  Mengapakah muat turun perkhidmatan Spring Boot REST saya gagal, walaupun penyemak imbas memulakan proses?

Mengapakah muat turun perkhidmatan Spring Boot REST saya gagal, walaupun penyemak imbas memulakan proses?

Barbara Streisand
Barbara Streisandasal
2024-10-27 17:47:31162semak imbas

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

Muat turun Fail daripada Spring Boot Rest Service: Menyelesaikan Masalah Gagal Muat Turun

Artikel ini menangani masalah yang dihadapi semasa cuba memuat turun fail melalui Perkhidmatan REST But Spring. Walaupun permulaan muat turun dalam penyemak imbas, proses itu gagal secara konsisten. Berikut ialah analisis isu dan penyelesaian yang berpotensi:

Kaedah Perkhidmatan:

Kod yang disediakan menunjukkan kaedah perkhidmatan yang bertanggungjawab untuk memuat turun fail:

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

Pilihan 1: Menggunakan Sumber InputStream

Kod yang disediakan mencipta InputStreamReader daripada fail dan mengembalikannya dengan ResponseEntity. Walau bagaimanapun, adalah disyorkan untuk menggunakan InputStreamResource daripada perpustakaan teras spring. Pelaksanaan ini menawarkan sumber untuk strim, memastikan pengendalian strim yang betul semasa proses muat turun.

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

Pilihan 2: Menggunakan ByteArrayResource

Dokumentasi Spring mencadangkan menggunakan ByteArrayResource dan bukannya InputStreamResource. Menggunakan jenis sumber ini melibatkan membaca keseluruhan fail ke dalam tatasusunan bait dan mencipta sumber daripadanya. Pendekatan ini boleh memberi manfaat dalam senario tertentu, seperti prestasi yang dipertingkatkan untuk fail kecil.

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

Dengan melaksanakan salah satu daripada pilihan ini, isu dengan kegagalan muat turun harus diselesaikan, membolehkan muat turun fail lancar melalui Spring Boot Perkhidmatan REHAT.

Atas ialah kandungan terperinci Mengapakah muat turun perkhidmatan Spring Boot REST saya gagal, walaupun penyemak imbas memulakan proses?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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