Java-导出数据post方式
需求
需求:使用get方式由于数据头数据量过多,因此改为Post请求。
前端代码
FreeMarker
<li><a id="collector" class="collector" href="javascript:void(0)" onclick="expoit('${basePath}','${navTabId}')"><span>导出数据</span></a></li>
JavaScript
<script>
function expoit(local,id) {
var navTabId = id;
var boxs = $("input[type='checkbox'][id^='box_']");
var check_val = [];
for(var k in boxs){
if(boxs[k].checked){
check_val.push(boxs[k].value);
}
}
var ids = check_val.join(',');
var data = {
navTabId : navTabId,
ids : ids
}
console.log(data);
var url = local + "/export.do";
DownLoadFile({url:url,data:data});
}
var DownLoadFile = function (options) {
var config = $.extend(true, { method: 'post' }, options);
var $iframe = $('<iframe id="down-file-iframe" />');
var $form = $('<form target="down-file-iframe" method="' + config.method + '" />');
$form.attr('action', config.url);
for (var key in config.data) {
$form.append('<input type="hidden" name="' + key + '" value="' + config.data[key] + '" />');
}
$iframe.append($form);
$(document.body).append($iframe);
$form[0].submit();
$iframe.remove();
};
</script>
后端代码
Java
@RequestMapping(value = "export", method = RequestMethod.POST)
public void export(HttpServletRequest request, HttpServletResponse response) {
PrintWriter printWriter = null;
try {
printWriter = response.getWriter();
String ids = request.getParameter("ids");
List<CompanyInfo> companyInfoList = ((CompanyInfoService) this.baseService).findCompanyListByIds(ids.split(","));
String datePath = DateFormatUtils.format(new Date(), "yyyyMM");
String fileSavePath = Conf.FILE_BASE_PATH + Conf.FILE_SAVE_PATH + datePath + "/";
String fileName = DateFormatUtils.format(new Date(), "yyyyMMdd")
+ String.valueOf(Calendar.getInstance().getTimeInMillis()).substring(7) + ".xls";
// 生成文件
File dirPath = new File(fileSavePath);
if (!dirPath.exists()) {
dirPath.mkdirs();
}
if (this.generateExcel(fileSavePath, fileName, companyInfoList)) {
// "生成企业数据汇总统计表.xls";
if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0) {
fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");// firefox浏览器
} else if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {
fileName = URLEncoder.encode(fileName, "UTF-8");// IE浏览器
}
response.reset();
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
response.setHeader("Connection", "close");
String fullFileName = fileSavePath + fileName;
InputStream in = new FileInputStream(fullFileName);
OutputStream out = response.getOutputStream();
// 写文件
int b;
while ((b = in.read()) != -1) {
out.write(b);
}
in.close();
out.close();
} else {
printWriter.write(new JsonResultDwzModel(DwzStatusCode.FAILURE.getDesc(), "导出Excel文件操作失败。",
request.getParameter("navTabId"), "").toJsonString());
}
printWriter.flush();
} catch (Exception e) {
Log.e(e.getMessage(), e);
printWriter.write(new JsonResultDwzModel(DwzStatusCode.FAILURE.getDesc(), "系统繁忙,请稍候再试。",
request.getParameter("navTabId"), "").toJsonString());
} finally {
if (printWriter != null) {
printWriter.close();
}
}
}
-------------------------------------------------------------------------------------------------------------------
GenerateExcel
private boolean generateExcel(String fileSavePath, String fileName, List<CompanyInfo> list) {
// 创建工作簿对象
HSSFWorkbook workbook = new HSSFWorkbook();
// 创建工作表对象并命名
HSSFSheet sheet = workbook.createSheet(BusinessUtil.toDate(new Date(), "yyyy年MM月dd日") + "会员数据汇总统计表");
sheet.setDefaultColumnWidth(20);
// 设置表格单元格样式模板
HSSFCellStyle cellStyle = workbook.createCellStyle();
cellStyle.setWrapText(true);// 设置自动换行
cellStyle.setAlignment((short) 2);
cellStyle.setVerticalAlignment((short) 1);
cellStyle.setBorderTop(HSSFBorderFormatting.BORDER_THIN);
cellStyle.setBorderBottom(HSSFBorderFormatting.BORDER_THIN);
cellStyle.setBorderLeft(HSSFBorderFormatting.BORDER_THIN);
cellStyle.setBorderRight(HSSFBorderFormatting.BORDER_THIN);
Font font = workbook.createFont();
font.setFontHeightInPoints((short) 10);
font.setFontName("宋体");
font.setColor(HSSFColor.BLACK.index);
cellStyle.setFont(font);
// 创建标题合并单元格
HSSFRow row = sheet.createRow(0);
HSSFCell titleCell = row.createCell(0);
titleCell.setCellStyle(cellStyle);
titleCell.setCellValue(BusinessUtil.toDate(new Date(), "yyyy年MM月dd日") + "企业数据汇总统计表");
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 12));
// 创建字段信息表头
row = sheet.createRow(1);
row.setHeight((short) 500);
HSSFCell headerCell0 = row.createCell(0);
headerCell0.setCellStyle(cellStyle);
headerCell0.setCellValue("名称");
HSSFCell headerCell1 = row.createCell(1);
headerCell1.setCellStyle(cellStyle);
headerCell1.setCellValue("姓名");
HSSFCell headerCell2 = row.createCell(2);
headerCell2.setCellStyle(cellStyle);
headerCell2.setCellValue("账户");
HSSFCell headerCell3 = row.createCell(3);
headerCell3.setCellStyle(cellStyle);
headerCell3.setCellValue("状态");
...
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 遍历集合对象创建行和单元格数据
for (int i = 0; i < list.size(); i++) {
// 取出数据对象
CompanyInfo s = list.get(i);
// 创建数据行
row = sheet.createRow(i + 2);
// 开始创建单元格并赋值
HSSFCell dataCell0 = row.createCell(0);
dataCell0.setCellStyle(cellStyle);
dataCell0.setCellValue(s.实例);
HSSFCell dataCell1 = row.createCell(1);
dataCell1.setCellStyle(cellStyle);
dataCell1.setCellValue(s.实例);
...
}
// 生成文件
File dirPath = new File(fileSavePath);
if (!dirPath.exists()) {
dirPath.mkdirs();
}
File file = new File(fileSavePath + fileName);
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
workbook.write(fos);
return true;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return false;
}
-------------------------------------------------------------------------------------------------------------------