Saya memiliki metode pengontrol yang bertanggung jawab atas unduhan excel:

@RequestMapping(value = "/report/user", method = RequestMethod.GET)
public void getUserReport(@RequestParam(value = "name", required = false) String user,
                          @RequestParam(value = "startdate", required = false) String startDate,
                          @RequestParam(value = "enddate", required = false) String endDate,
                          HttpServletResponse response) {

    List<Survey> userSurveys = surveyService.findUserSurveys(user, startDate, endDate);


    String userFileName = nameService.getUserFileName(user, startDate, endDate);
    Workbook userExcelReport = excelReportGenerator.createUserExcelReport(userSurveys);

    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    response.setHeader("Content-Disposition", "attachment; filename=" + userFileName + ".xlsx");


    try {
        userExcelReport.write(response.getOutputStream());
    } catch (IOException e) {
        logger.error("The excel workbook could not write to the outputStream ", e);
    }

}

Seperti yang Anda lihat, pemetaan pengontrol ini memuat buku kerja Excel (dilakukan di Apache poi) dan mengatur tajuk dan tipe konten, di google chrome ini berfungsi dengan baik tetapi di firefox file diunduh sebagai "file" tanpa ekstensi (tetapi data benar seolah-olah saya membuka file dengan excel semua ada di sana) dan namanya salah, seperti di chrome ini berfungsi dengan baik saya menganggap ada yang salah dengan cara respons bekerja di firefox, ada yang tahu saya bisa jadi apa melakukan kesalahan?

Contoh file yang diunduh melalui firefox gambar dengan file tidak berfungsimasukkan deskripsi gambar di sini java google-chrome firefox download

0
Fernando Castilla Ospina 18 Maret 2017, 00:56

2 jawaban

Jawaban Terbaik

Menurut RFC 6266 nama file value adalah token atau quoted-string.

token tidak boleh berisi separators. Tapi spasi putih adalah separator. Jadi, Anda harus menggunakan quoted-string.

Jadi cobalah

response.setHeader("Content-Disposition", "attachment; filename=\"" + userFileName + ".xlsx\"");
1
Axel Richter 22 Maret 2017, 06:22

Silakan periksa cara ini untuk mengirim jenis konten sebagai tanggapan. Ini bekerja untuk saya.

resp.setContentType( "application/octet-stream" );
1
Arindam 17 Maret 2017, 23:12