在Spring MVC中使用Java在Web Explorer中创build和下载Excel

我想从Java中的一个方法创build一个Excel文件,并在浏览器中下载。

我在这篇文章中发现了一个创buildExcel文件的例子,但是我想创build.xls文件并从networking浏览器下载它。

我怎样才能做到这一点?

我终于find了解决我的问题…!

这对我有用:

  @RequestMapping("/downloadFile") public void downloadFile(HttpServletRequest request, HttpServletResponse response) { try { String fileName = "C:/excelFile.xls"; HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("firstSheet"); HSSFRow rowhead = sheet.createRow((short) 0); rowhead.createCell(0).setCellValue("No."); rowhead.createCell(1).setCellValue("Name"); rowhead.createCell(2).setCellValue("Address"); rowhead.createCell(3).setCellValue("Email"); HSSFRow row = sheet.createRow((short) 1); row.createCell(0).setCellValue("1"); row.createCell(1).setCellValue("Carlos"); row.createCell(2).setCellValue("Costa Rica"); row.createCell(3).setCellValue("myNameh@gmail.com"); FileOutputStream fileOut = new FileOutputStream(fileName); workbook.write(fileOut); fileOut.close(); System.out.println("Your excel file has been generated!"); //Code to download File fileToDownload = new File(fileName); InputStream in = new FileInputStream(fileToDownload); // Gets MIME type of the file String mimeType = new MimetypesFileTypeMap().getContentType(fileName); if (mimeType == null) { // Set to binary type if MIME mapping not found mimeType = "application/octet-stream"; } System.out.println("MIME type: " + mimeType); // Modifies response response.setContentType(mimeType); response.setContentLength((int) fileToDownload.length()); // Forces download String headerKey = "Content-Disposition"; String headerValue = String.format("attachment; filename=\"%s\"", fileToDownload.getName()); response.setHeader(headerKey, headerValue); // obtains response's output stream OutputStream outStream = response.getOutputStream(); byte[] buffer = new byte[4096]; int bytesRead = -1; while ((bytesRead = in.read(buffer)) != -1) { outStream.write(buffer, 0, bytesRead); } in.close(); outStream.close(); System.out.println("File downloaded at client successfully"); } catch (Exception ex) { System.out.println(ex); } } 

如果要从Web浏览器(HTTP请求)触发Java进程,则需要应用程序服务器(如Tomcat)接受您的HTTP请求并执行一些服务器端代码(Servlet)。 像这个例子中的主要方法不能由HTTP请求启动。 看看这里,如果你从来没有写过一个Servlet。

这与Excel无关,但是这篇文章展示了如何从Spring MVC控制器下载文件。

  @RequestMapping(value = "/files/{file_name}", method = RequestMethod.GET) public void getFile(@PathVariable("file_name") String fileName, HttpServletResponse response) { try { // get your file as InputStream InputStream is = ...; // copy it to response's OutputStream org.apache.commons.io.IOUtils.copy(is, response.getOutputStream()); response.flushBuffer(); } catch (IOException ex) { log.info("Error writing file to output stream. Filename was '{}'", fileName, ex); throw new RuntimeException("IOError writing file to output stream"); } }