当前位置:   article > 正文

Nginx搭建静态服务器暴露模板excel流, 接受前台的数据,结合流下载文件_nginx在线浏览excel

nginx在线浏览excel
  • 部署Nginx,启动,配置端口(防火墙记得打开端口), 配置文件路径.此时只作为静态服务器来使用,把文件暴露出来,(这里自行百度)

  • 然后就是连接远程服务器在结合数据下载excel,直接上代码

    1. //list就是你要写入到excel里面的数据
    2. public Workbook exportExcelByTemplate(List<List<Object>> list) throws Exception {
    3. Map<String, Object> returnMap = new HashMap<>();
    4. int HttpResult; // 服务器返回的状态
    5. //这里fileName excelName 文件名,excel名都是放在list数据的最后一行,这是一种处理方式
    6. String fileName = (String) list.get(list.size() - 1).get(0);
    7. String excelName = (String) list.get(list.size() - 1).get(1);
    8. //中文名字要改编码格式
    9. String nmsg = URLEncoder.encode(fileName, "UTF-8");
    10. //filePath 是你定义在yml文件里面服务器地址,类似http://123.0.0.11:231
    11. //这里的straddr 就是一个完整的访问地址,类似http://123.0.0.11:231/test.txt
    12. String straddr = filePath + nmsg;
    13. URL url = new URL(straddr);
    14. HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    15. connection.connect();
    16. HttpResult = connection.getResponseCode();
    17. //上面一段都是连接服务器
    18. Workbook oldWk = null;
    19. if (HttpResult != HttpURLConnection.HTTP_OK) {
    20. System.out.print("无法连接到服务器");// 不等于HTTP_OK说明连接不成功
    21. returnMap.put("result", HttpResult);
    22. } else {
    23. //这里就是得到服务器的excel模板流,里面可能只有表头,表内容用list填充
    24. POIFSFileSystem ps = new POIFSFileSystem(connection.getInputStream());
    25. oldWk = new HSSFWorkbook(ps);//原服务器excel文件
    26. Sheet sheet = oldWk.getSheetAt(0); //获取到工作表,因为一个excel可能有多个工作表
    27. //表体,就是循环了,判断一下单元格类型然后填充进每一个单元格
    28. for (int r = 0; r < list.size() - 1; r++) {
    29. Row rowBt = sheet.createRow(r);
    30. for (int c = 0; c < list.get(0).size(); c++) {
    31. Cell cell = rowBt.createCell(c);
    32. if (r == 0) {
    33. cell.setCellType(CellType.STRING);
    34. cell.setCellValue((String) list.get(r).get(c));
    35. } else {
    36. if (ifNumberByObj(list.get(r).get(c))) {
    37. cell.setCellType(CellType.NUMERIC);
    38. cell.setCellValue(Double.parseDouble(list.get(r).get(c).toString()));
    39. }
    40. }
    41. }
    42. }//表体循环结束
    43. }
    44. return oldWk;
    45. }

        

  • Controller层
  1. //该Ccontroller没有使用@restController, 没有给所有方法标记以JSON方式返回,因为这个导出的方法是返回的文件流,以JSON格式返回会报错
  2. @RequestMapping(value = "/exportExcelByTemplateByGG",method = RequestMethod.POST)
  3. public ResponseResult exportExcelByTemplate(@RequestBody List<List<Object>> list,HttpServletResponse response) throws Exception {
  4. Workbook sheets = flExcelAddressApi.exportExcelByTemplate(list);
  5. response.setContentType("application/vnd.ms-excel");
  6. response.setHeader("Content-disposition", "attachment;");
  7. ServletOutputStream out = response.getOutputStream();
  8. try {
  9. sheets.write(out);
  10. out.flush();
  11. out.close();
  12. } catch (IOException ioe) {
  13. return ResponseResult.build(500,"导出错误",null);
  14. }
  15. return ResponseResult.success();
  16. 这就很简单,获取输出流, 设置相应的文件,然后Workbook有一个往外面写的方法write

 

 

  • 前端
  1. // 创建模板下载链接
  2. downloads(data, name) {
  3. // for IE
  4. if (window.navigator && window.navigator.msSaveOrOpenBlob) {
  5. window.navigator.msSaveOrOpenBlob(data, `${name}.xls`);
  6. } else {
  7. let url = window.URL.createObjectURL(data)
  8. let link = document.createElement('a');
  9. link.style.display = 'none';
  10. link.href = url;
  11. link.setAttribute('download', `${name}.xls`);
  12. document.body.appendChild(link);
  13. link.click();
  14. document.body.removeChild(link);
  15. window.URL.revokeObjectURL(url);
  16. }
  17. }
  18. 下载原理,<a>标签的href属性连接到blob对象

 

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号