固定思维,以前一直下载服务器文件时,先根据数据产生文件,然后下载文件,想想多余。
其实可以直接写的response流中。
public void exportOrder(HttpServletResponse response) {
ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
try {
response.setContentType("application/x-excel");
response.setCharacterEncoding("UFT-8");
response.setHeader("Content-Disposition", "attachment; filename="Aa.xls");
response.setHeader("Cache-Control", "no-cache");
// 构建输出流
// 查询数据并把结果变成excel格式,输出到指定输出流中。
queryTmOrderExcelToStream(content, byteOutStream);
response.setContentLength(byteOutStream.size());
ServletOutputStream resOutputStream = response.getOutputStream();
byteOutStream.writeTo(resOutputStream);
resOutputStream.flush();
}
catch (Exception e) {
}
finally {
if (byteOutStream != null) {
try {
byteOutStream.close();
}
catch (IOException e) {
}
}
}
}
数据的产生
public void queryOrderExcelToStream(OutputStream outStream) {
List<OriginalOrderHandle> reList = null;
try {
reList = //TODO 查询数据
}
catch (Exception e) {
}
// 生成excel
putDataToStream(reList, outStream);
}
/**
* 创建下载文件
*
* @param reList 订单信息
* @return 创建的文件
*/
private void putDataToStream(List<Data> reList, OutputStream outStream) {
try {
WritableWorkbook workBook = ExcelUtils.createWorkbook(outStream);
WritableSheet sheet = ExcelUtils.createSheet(workBook, "order", 0);
// 写表头
ExcelUtils.addCell(sheet, 0, 0, "订单号");
ExcelUtils.addCell(sheet, 1, 0, "省");
// 写数据
if (null != reList) {
OriginalOrderHandle order = null;
for (int i = 1; i <= reList.size(); i++) {
order = reList.get(i - 1);
ExcelUtils.addCell(sheet, 0, i, String.valueOf(order.getTid()));
ExcelUtils.addCell(sheet, 1, i, order.getReceiverState());
}
}
workBook.write();
workBook.close();
}
catch (Exception e) {
}
}