一般来说做下载功能的确是先导到服务器的一个临时目录上的,然后再用一段代码把这个excel读出来,并且输出到response流里面去,给你一段可以用的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 //------------------------------ //step1. 保存一个临时excel到temp目录下 //------------------------------ //这部分自己实现,我相信你已经实现了 //假设你已经实现了保存一个excel到一个<a href="https://www.baidu.com/s?wd=临时文件夹&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1d-PWnLujKWPjcvujmdn16Y0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EPH6kn10znWcd" target="_blank" class="baidu-highlight">临时文件夹</a>里面去 //并且已经生成了一个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做的,这个方法不能找到,是什么意思 本回答由提问者推荐 评论(2) 5 1
nsrainbow
采纳率:21% 擅长: 音乐
运行效果!不懂再问!
追问 我使用这个 HttpServletResponse response = ServletActionContext.getResponse();ServletActionContext这个方法是不是struts中的,但是我没用struts开发 张策是gou | 发布于2013-08-16 09:34