从Spring返回Excel可下载文件

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

我正在使用JEXcelApi。

这是我的控制器代码

@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的Abstract Excel视图类,但是有没有更简单的方法?

回答:

您需要设置Content-Disposition标题。

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();


以上是比较老的。您可以构建一个ResponseEntityFileSystemResource现在。ResourceHttpMessageConverter然后,如我上面建议的那样,A

将为您复制字节。Spring MVC使您更轻松,而不是与Servlet规范中的接口进行交互。

以上是 从Spring返回Excel可下载文件 的全部内容, 来源链接: utcz.com/qa/418445.html

回到顶部