SSM项目文件下载方法二
来源:互联网 发布:网络结婚游戏 编辑:程序博客网 时间:2024/06/07 23:42
思路:
(1)通过ajax提交表单数据至一个Controller,由参数查询出数据集合,存入excel文件,返回excel文件名
(2)使用js window.open()方法访问文件下载的Controller,下载之前生成的文件
(3)下载完成之后删除文件,因为文件保存在项目路径下,觉得还是删掉比较好,日后优化可以设置一个定时任务,定期删掉也行。
<form role="form" method="post" id="speedFrom"> .......表单内容 <div class="form-group"> <button type="button" class="btn btn-info" id="dlspeed" >下载数据文件</button> </div></form>
button 绑定事件
$(document).ready(function() { //按钮下載数据文件 $("#dlspeed").click(function(){ var url="[[@{/dl}]]"; var road=$("#roads").val(); console.log(road); if(road!=null && "请选择"!=road && typeof(road)!="undefined"){ $.post(url,$("#speedFrom").serialize(), function(data, status){ console.log(data); if("NoData"==data.info){ layer.msg('你选择的路在此时间段内没有数据, 请重新选择!'); }else{ layer.msg('已经生成数据文件正在为您下载 !'); var fileName=data.fileName; console.log(fileName); window.open("[[@{/file/downFile}]]?filename="+fileName,'_blank'); console.log("ccccccc"); } },"json"); }else{ layer.msg('请选择路段和时间 !'); } }); });
Controller
/** * 下载数据文件 * @param startDate * @param endDate * @param startTime * @param endTime * @param roadName * @param weekdays * @return */ @RequestMapping(value = "/dl", produces = "application/json;charset=UTF-8", method = RequestMethod.POST) public @ResponseBody Map<String, String> dlspeed(String startDate, String endDate, String startTime, String endTime, String[] roadName, String[] weekdays,HttpServletResponse response,HttpServletRequest request) { Map<String, String> map=new HashMap<String, String>(2); List<Integer> weeks=new ArrayList<Integer>(weekdays.length); for (int i = 0; i < weekdays.length; i++) { weeks.add(Integer.parseInt(weekdays[i])); } try { List<GdRoadSpeed> list = gdService.listSpeed(startDate, endDate, startTime, endTime, roadName[0], weeks); if(list!=null && list.size()>0){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sd = new SimpleDateFormat("HH:mm:ss"); String[] firstRow=new String[5]; firstRow[0]="date"; firstRow[1]="time"; firstRow[2]="road name"; firstRow[3]=" direction "; firstRow[4]=" speed "; String[][] datas=new String[list.size()][5]; for (int i=0;i<list.size();i++) { GdRoadSpeed gds = list.get(i); datas[i][0]=sdf.format(gds.getDate()); datas[i][1]=sd.format(gds.getTime()); datas[i][2]=gds.getName(); datas[i][3]=gds.getDirection(); datas[i][4]=gds.getSpeed()+""; } String sheetName = "路段速度分析"; // 新文件名 String newFileName = roadName[0]+startDate.replaceAll("-", "") +"_"+startTime.replaceAll(":", "")+"-" +endDate.replaceAll("-", "")+"_"+endTime.replaceAll(":", "")+".xlsx"; // 获得项目的路径 ServletContext sc = request.getSession().getServletContext(); // 上传位置 String path = sc.getRealPath("/tempFiles") + "/"; // 设定文件保存的目录 File folder = new File(path); if (!folder.exists()) { folder.mkdirs(); } File file =new File(path,newFileName); if (!file.exists()) { file = FileUtils.createExcel(file,sheetName, firstRow, datas); } map.put("info", "SaveData"); System.out.println(file.getAbsolutePath()); System.out.println(file.getName()); map.put("fileName", file.getName()); }else{ map.put("info", "NoData"); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); logger.error(e.getMessage()); } return map; }
生成excel文件的方法createExcel
public static File createExcel(File file,String sheetName,String[] firstRow,String[][] datas) throws IOException{ // 创建HSSFWorkbook对象(excel的文档对象) HSSFWorkbook wkb = new HSSFWorkbook(); // 建立新的sheet对象(excel的表单) HSSFSheet sheet = wkb.createSheet(sheetName);// sheet.setDefaultRowHeightInPoints(60);// sheet.setDefaultColumnWidth(20); //设置缺省列宽 // 在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个 HSSFRow row1 = sheet.createRow(0); //表格当中的第一行放置 列说明 HSSFCellStyle style=wkb.createCellStyle(); style.setAlignment(HorizontalAlignment.CENTER); style.setVerticalAlignment(VerticalAlignment.CENTER); for (int i = 0; i < firstRow.length; i++) { // 创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个 HSSFCell cell = row1.createCell(i); cell.setCellStyle(style); // 设置单元格内容 cell.setCellValue(firstRow[i]); } // 合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列// sheet1.addMergedRegion(new CellRangeAddress(0, 0, 0, 1)); // 在sheet里创建其他行 if(datas!=null && datas.length>0){ for (int i = 0; i < datas.length; i++) { if(datas[i]!=null && datas[i].length>0){ HSSFRow row = sheet.createRow(i+1); for (int j = 0; j < datas[i].length; j++) { HSSFCell cell = row.createCell(j); cell.setCellStyle(style); cell.setCellValue(datas[i][j]); } } } } wkb.write(file); //write out this workbook to a new File return file; }
下载文件的Controller
@RequestMapping("/downFile") public void downFile(HttpServletRequest request, HttpServletResponse response) { // 得到要下载的文件名 String fileName = request.getParameter("filename"); try { // 获取上传文件的目录 ServletContext sc = request.getSession().getServletContext(); // 上传位置 String fileSaveRootPath = sc.getRealPath("/tempFiles"); // 得到要下载的文件 File file = new File(fileSaveRootPath + "\\" + fileName); // 设置响应头,控制浏览器下载该文件 response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); // 读取要下载的文件,保存到文件输入流 FileInputStream in = new FileInputStream(fileSaveRootPath + "\\" + fileName); // 创建输出流 OutputStream out = response.getOutputStream(); // 创建缓冲区 byte buffer[] = new byte[1024]; int len = 0; // 循环将输入流中的内容读取到缓冲区当中 while ((len = in.read(buffer)) > 0) { // 输出缓冲区的内容到浏览器,实现文件下载 out.write(buffer, 0, len); } // 关闭文件输入流 in.close(); // 关闭输出流 out.close(); //下载完成,删除文件 file.delete(); } catch (Exception e) { } }
阅读全文
0 0
- SSM项目文件下载方法二
- SSM项目,文件下载
- ssm 文件上传、下载
- SSM文件下载常见问题
- SSM框架 文件下载
- 下载Excel文件模板 ---文件下载--SSM
- SSM文件上传与下载
- ssm 文件上传与下载
- ssm项目中的文件上传
- SSM项目关于如何下载图片
- SSM框架下的文件下载
- ssm分布式框架电商项目(二)
- 【SSM框架 SSM项目源码 SSM源码 下载】java框架整合Springmvc+mybatis+shiro+bootstrap
- 【SSM框架 SSM项目源码 SSM源码 下载】java框架整合Springmvc+mybatis+shiro+bootstrap
- WEB项目中如何实现禁止下载文件(二)
- 项目总结(二)-------python实现FTP上传/下载文件
- 文件下载(二)
- 下载项目中的文件
- CUDA:纹理内存及其使用
- 矩阵范数与矩阵的模
- 爬取银行网页数据的项目实战总结
- java学习--面向对象(第三天)
- sql 节假日判断(春节、中秋、国庆、周末等)
- SSM项目文件下载方法二
- 测试一条怎么样
- 字符串中找出连续最长的数字串
- Hive 与 RDBMS 关系
- Redis入门学习
- 领域模型
- java中静态属性和和静态方法的继承问题 以及多态的实质
- 阿里云服务器Centos7成为挖矿肉鸡被挖矿imWBR1耗尽CPU
- SDUT 2017 Autumn Single Contest N 模板场