永发信息网

java excel导出到用户本地

答案:4  悬赏:70  手机版
解决时间 2021-11-10 23:57
  • 提问者网友:孤山下
  • 2021-11-10 10:58
java excel导出到用户本地
最佳答案
  • 五星知识达人网友:走死在岁月里
  • 2021-11-10 11:45
一般来说做下载功能的确是先导到服务器的一个临时目录上的,然后再用一段代码把这个excel读出来,并且输出到response流里面去,给你一段可以用的代码
                //------------------------------
                //step1. 保存一个临时excel到temp目录下
                //------------------------------
                //这部分自己实现,我相信你已经实现了
                //假设你已经实现了保存一个excel到一个临时文件夹里面去
                //并且已经生成了一个File 指向这个临时的 excel,名叫exportFile
                
                //-------------------------------
//step2. 弹出下载对话框
//-------------------------------
if(exportFile == null){
logger.error("生成excel错误! exportFile 为空");
return;
}

//先建立一个文件读取流去读取这个临时excel文件
FileInputStream fs = null;
try {
fs = new FileInputStream(exportFile);
} catch (FileNotFoundException e) {
logger.error("生成excel错误! " + exportFile + " 不存在!",e);
return;
}
// 设置响应头和保存文件名
HttpServletResponse response = ServletActionContext.getResponse();
//这个一定要设定,告诉浏览器这次请求是一个下载的数据流
response.setContentType("APPLICATION/OCTET-STREAM");
try {
//这边的 "采购部门本月采购报表.xls" 替换成你自己要显示给用户的文件名
excelName = URLEncoder.encode("采购部门本月采购报表.xls", "UTF-8");
} catch (UnsupportedEncodingException e1) {
logger.error("转换excel名称编码错误!",e1);
}
response.setHeader("Content-Disposition", "attachment; filename="" + excelName + """);
// 写出流信息
int b = 0;
try {
        //这里的 response 就是你 servlet 的那个传参进来的 response
PrintWriter out = response.getWriter();
while ((b = fs.read()) != -1) {
out.write(b);
}
fs.close();
out.close();
logger.debug(sheetName + " 文件下载完毕.");
} catch (Exception e) {
logger.error(sheetName + " 下载文件失败!.",e);
}

把这段代码放到你的servlet的最后一部分
追问ServletActionContext这个方法是struts的?我用wicket做的,这个方法不能找到,是什么意思
全部回答
  • 1楼网友:煞尾
  • 2021-11-10 12:22
就是在jsp中用file标签就可以选择路径啦。然后你导出的时候你现在可能默认是在server的某个目录,你写成你页面选择的路径即可
  • 2楼网友:青尢
  • 2021-11-10 12:16
要导出到用户的电脑上就不叫导出了,叫做下载。路径问题也是选择下载路径就可以了。。和迅雷类似。用IO流直接将你要下载的数据写入到本地就可以了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯