文件未在浏览器下载.我正在准备文件并将其写入响应的输出流.
Rest API在那里:
@RequestMapping(value = "/export-companies",method = {RequestMethod.GET,RequestMethod.HEAD}) @Timed public void downloadCompanies(HttpServletResponse response) throws URISyntaxException { HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("Sample sheet"); Map<String,Object[]> data = new HashMap<String,Object[]>(); data.put("1",new Object[] {"Emp No.","Name","Salary"}); data.put("2",new Object[] {1d,"John",1500000d}); data.put("3",new Object[] {2d,"Sam",800000d}); data.put("4",new Object[] {3d,"Dean",700000d}); Set<String> keyset = data.keySet(); int rownum = 0; for (String key : keyset) { Row row = sheet.createRow(rownum++); Object [] objArr = data.get(key); int cellnum = 0; for (Object obj : objArr) { Cell cell = row.createCell(cellnum++); if(obj instanceof Date) cell.setCellValue((Date)obj); else if(obj instanceof Boolean) cell.setCellValue((Boolean)obj); else if(obj instanceof String) cell.setCellValue((String)obj); else if(obj instanceof Double) cell.setCellValue((Double)obj); } } try { ByteArrayOutputStream outByteStream = new ByteArrayOutputStream(); workbook.write(outByteStream); byte [] outArray = outByteStream.toByteArray(); response.setContentType("application/ms-excel"); response.setContentLength(outArray.length); response.setHeader("Expires:","0"); // eliminates browser caching response.setHeader("Content-Disposition","attachment; filename=template.xls"); OutputStream outStream = response.getOutputStream(); outStream.write(outArray); outStream.flush(); workbook.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
从前端(使用Angular JS):
(function() { 'use strict'; angular .module('MyApp') .factory('CompanyExportService',CompanyExportService); CompanyExportService.$inject = ['$resource']; function CompanyExportService ($resource) { var service = $resource('api/export-companies',{},{ 'get': { method: 'GET',isArray: false } }); return service; } })();