反应excel文件下载损坏

我试图通过调用Spring REST端点下载Reactjs中的Excel文件,但我遇到了一个损坏的文件的问题。

反应电话…

getFile(){ axios.get('get/download') .then((response) => { var blob = new Blob([response.data], {type:'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'}); filesaver.saveAs(blob, "excel.xlsx"); }); } 

弹簧控制器….

 @RequestMapping(value = "/download", method = RequestMethod.GET) public void downloadExcelFile(final HttpServletResponse response) throws IOException { response.setHeader("Content-Encoding", "UTF-8"); response.setHeader("Content-Disposition", "attachment; filename="file.xlsx"); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); final File xls = service.createExcelFile(response); final FileInputStream in = new FileInputStream(xls); final OutputStream out = response.getOutputStream(); final byte[] buffer = new byte[8192]; int length; while ((length = in.read(buffer)) > 0) { out.write(buffer, 0, length); } in.close(); out.close(); } 

服务…

  public File createExcelFile(final HttpServletResponse response) { XSSFWorkbook xssfWorkbook = null; final File xls = new File("excel.xlsx"); try { final FileOutputStream fos = new FileOutputStream(xls); xssfWorkbook = new XSSFWorkbook(); //setup excel file... xssfWorkbook.write(fos); xssfWorkbook.close(); } catch (final Exception e) { LOGGER.error(String.format("Something went wrong")); } return xls; } 

当我执行上面的代码,我得到一个Excel文件好的..但看看response.data看起来像…

 "PKs  J _rels/.rels   j 0   }↵ {㴃1F ^Ơ 2  l%1I,c [  

打开我得到的文件…由于数据不可读,无法打开文件。 打开在服务器上创build的文件是好的

任何想法欢迎

干杯

您只需要将响应types添加到axios请求中:

 responseType: 'arraybuffer' 

在我的应用程序下面的函数下载excel文件:

 function exportIssues() { axios.get('/issues/export', { responseType: 'arraybuffer' }) .then((response) => { var blob = new Blob([response.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); fileSaver.saveAs(blob, 'fixi.xlsx'); }); }