java - 从 Spring 返回 Excel 可下载文件

标签 java spring excel spring-mvc

所以我有一个 Spring Controller ,我想创建一个 Excel 文件并返回它,以便浏览器下载它。

我正在使用 JEXcelApi。

这是我的 Controller 代码

@RequestMapping(value="/excel/cols/{colString}/rows/{rowString}/", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<String> exportExcel(HttpServletResponse response,
    @PathVariable List<String> colString,
    @PathVariable List<String> rowString) throws JSONException, IOException, WriteException {
    WritableWorkbook workbook = Workbook.createWorkbook(new File("exported.xls"));
    WritableSheet sheet = workbook.createSheet("Exported",0);
    String[] cols = colString.get(0).split(",");
    String[] rows = rowString.get(0).split(","); 
    for(int i = 0; i < cols.length;i++){
        Label label = new Label(i,0, cols[i]);
        sheet.addCell(label);
    }
    int excelCol = 0;
    int excelRow = 1;
    for(int i = 0; i < rows.length;i++){
        Label label = new Label(excelCol,excelRow, rows[i]);
        sheet.addCell(label);
        excelCol++;
        if((i+1) % cols.length == 0){
            excelCol = 0;
            excelRow++;
        }
    }
    workbook.write();
    workbook.close();
    return null;
}

我该怎么做?我怀疑我可以设置一些内容标题。我知道一种方法是使用 Spring 的抽象 Excel View 类,但是有更简单的方法吗?

最佳答案

您需要设置 Content-Disposition header 。

response.setHeader("Content-disposition","attachment; filename=" + yourFileName);

并将您的字节直接写入响应 OutputStream

File xls = new File("exported.xls"); // or whatever your file is
FileInputStream in = new FileInputStream(xls);
OutputStream out = response.getOutputStream();

byte[] buffer= new byte[8192]; // use bigger if you want
int length = 0;

while ((length = in.read(buffer)) > 0){
     out.write(buffer, 0, length);
}
in.close();
out.close();

上面比较老了。您可以使用 FileSystemResource 构造一个 ResponseEntity现在。 ResourceHttpMessageConverter然后将按照我上面的建议为您复制字节。 Spring MVC 让您更简单,而不是让您与 Servlet 规范的接口(interface)进行交互。

关于java - 从 Spring 返回 Excel 可下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18648823/

相关文章:

JavaScript 重定向 URL

java - Spring-MVC:调用 validator ,而不是从 Controller 内部

java - 非 spring web 应用程序是否可以并行 Spring-MVC 应用程序?

excel - Excel 中的 VBA 忽略选择

vba - 从 Excel 发送 Outlook 电子邮件,将最后一行范围文本放在正文中

c# - 在 C# 中将数据从 Excel 工作簿读取到 ArrayList 时性能低下

java - 使用 Java 从 MySQL 表中获取行数

java - HashMap.KeySet() 在 Java 7 Java 8 中以不同顺序返回键

java - 使用 spring boot 启动器的更好方法

java - 在使用 in.nextDouble() 时遇到问题