一次下载与导出的博弈
一:针对Excel导出如果导出的数据量较小,一般2w条左右(不定原因是由于js中var 变量的长度有限)
var str = "单元格1,单元格2,单元格3,单元格4,...";str += '\n';$.ajax({url: ".../downLoadToExcel",dataType: 'json',data: params,success: function (data) {for (var i = 0; i <data.length; i++) {for (var item in data[i]) {str += data[i][item] + '\t,';}str += '\n';}}});var uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str);//通过创建a标签实现var link = document.createElement("a");link.href = uri;//对下载的文件命名link.download = "导出Excel.csv";document.body.appendChild(link);link.click();document.body.removeChild(link);
二:通过前端请求由Java后端Poi技术导出(流导出,可以是很多格式,比如zip,或者xlsx,xls,csv等)
上代码:适用于大Excel导出
@RequestMapping(value = "downLoadToExcel")public void downLoadToExcel(User user, HttpServletRequest request, HttpServletResponse response) throws IOException {
// ZipOutputStream zipOutputStream = new ZipOutputStream(out);ServletOutputStream out = response.getOutputStream();try {List<Map<String, Object>> list = testService.downLoadToExcel(user);request.setCharacterEncoding("UTF-8");//Excel的行对应的类型名String[] header = {"","","",""};double len = list.size();int ys = 0;if (len < 60000) {ys = 1;} else {ys = (int) Math.ceil(len / 60000);}Workbook wb = new SXSSFWorkbook();response.setContentType("application/octet-stream; charset=utf-8");response.setHeader("Content-Disposition", "attachment; filename=" + Encodes.urlEncode("表名.xlsx"));for (int i = 0; i < ys; i++) {List<Map<String, Object>> bllist = new ArrayList<>();double bllen = (i + 1) * 60000;if (bllen > len) {bllen = len;}for (int j = i * 60000; j < bllen; j++) {bllist.add(list.get(j));}Sheet sheet = wb.createSheet("sheet" + i);Row r = sheet.createRow(0);for (int z = 0; z < header.length; z++) {Cell cell = r.createCell(z);cell.setCellValue(header[z]);}int rownum = 1;for (Map info : bllist) {LinkedHashMap lmap = (LinkedHashMap) info;Row row = sheet.createRow(rownum++);int number = 0;for (Iterator it = lmap.entrySet().iterator(); it.hasNext(); ) {Map.Entry<String, Object> entry = (Map.Entry<String, Object>) it.next();Cell cell = row.createCell(number++);cell.setCellValue(entry.getValue().toString());}}}
// ZipEntry z = new ZipEntry("Excel名称" + ".xslx");
// zipOutputStream.putNextEntry(z);
// wb.write(zipOutputStream);
// zipOutputStream.flush();wb.write(out);out.flush();} catch (Exception e) {//logger.info("错误信息");} finally {//注意关闭顺序,否则可能文件错误
// if (zipOutputStream != null) {
// zipOutputStream.close();
// }if (out != null) {out.close();}}return;}
其中也可以选择使用Zip打包的方式写入流(注释代码便是)对应的前端可以使用 a标签下载,form表单提交,window.location.open等请求方式获取下载流。
var link = document.createElement("a");link.href ="/downLoadToExcel?cs1=1&cs2=2";document.body.appendChild(link);link.click();document.body.removeChild(link);
转载于:https://www.cnblogs.com/flysdream/p/9877855.html
一次下载与导出的博弈相关推荐
- 得到app文稿导出_得到app的文稿怎么下载复制导出
得到app的课程文稿怎么下载复制导出 决策的对错关系到战争的成败,所以<孙子兵法>强调 "知敌之情' 因为情报信息是决策的依据.作为一个企业决策者,其决策 也绝不能凭空臆断,而应 ...
- easyExcel下载或导出
pom <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <ve ...
- vue中下载文件导出保存到本地
vue中下载文件导出保存到本地 先分析如何下载:先有一个链接地址,然后使用 location.href或window.open()下载到本地 看看返回数据 res.config.url 中是下载链接地 ...
- 使用dumuz实现拼多多买家订单下载(批量导出)
dumuz软件机器人实现拼多多买家订单下载(批量导出) 应用功能描述 模拟人工操作拼多多"个人中心-我的订单"订单网页,批量查询获取拼多多自己买的商品的订单数据. 操作步骤演示 ...
- 微信公众号历史文章批量下载保存导出方法
微信公众号阅读成为许多人每天的日常习惯,相信在每天关注的微信公众号中,总会有一些作者在持续地输出优质内容.这些内容也许是你所处领域的精华,也许其中的观点启人深思,也许是单纯地喜欢上了某个大V的文字. ...
- koa实现下载和导出exsel表功能
koa实现下载和导出exsel表功能 一. 下载实现 第一种是用koa自带的实现下载 const fs = require("fs") const Koa = require(&q ...
- 解决Java下载或导出的文件打不开的方法
第一种情况:下载或导出的文件用Office和WPS都打不开: 解决方式:首先使用Postman下载或导出文件,如果无法打开,则在后端代码中寻找问题:若可以打开,则看前端调用的接口是否加了以下参数:re ...
- ScanNet数据集下载与导出颜色图、深度图、内参、位姿数据
文章目录 0 介绍 (1)简介 (2)版本 1 申请与下载 1.1 申请 1.2 使用数据脚本下载指定序列 2 将下载的数据序列进行转化 (1)使用python2.7(ubuntu18.04自带环境) ...
- 文件上传下载导入导出
ps: 代码已提交到gitee: https://gitee.com/Lazy_001/file-demo 文件上传下载导入导出 一.首先完成准备工作 1. 创建一个Springboot项目 < ...
最新文章
- jfinal获取url链接上面传来的string类型的值_每个公司都会用的短 URL 服务,怎么设计与实现?...
- c语言 五子棋 悔棋代码,跪求C语言五子棋悔棋部分实现
- MyBatis中的selectKey
- 序列化和反序列化的对单例破坏的防止及其原理
- matlab 二维高斯滤波 傅里叶_光电图像处理 | 傅里叶变换(二)
- 继承extends ,this super final 关键字,abstract抽象类,override方法重写
- 性能测试工具MultiMechanize的使用介绍
- 我写过最长的东西可能就是高考作文了
- DRUID连接池的使用
- 机器学习课程笔记【十二】- 主成分分析
- 剑指:合并两个排序的链表
- 自动化测试项目实战训练【广州8月】
- 第七周 项目4 - 队列数组
- HtmlHelp调用chm帮助文档使用
- c语言快排过程,快速排序(快排)C语言实现
- 今天我的app上线了庆祝一下
- 【牛客】矩阵幂(C++)
- python学习第一讲(基本的操作)
- STM32F103 PB3 作为 普通IO使用
- 转载:软件天才与技术民工
热门文章
- [收藏]为DataGrid添加CheckBox控件
- 支付宝支付 第十集:支付回调
- vue代理配置(vue+django前后端分离项目)
- buffer转int python_Python学习教程第23天numpy库(上)
- aws python lambda_AWS Lambda
- 论文翻译_做论文翻译需要知道哪些翻译技巧?知行翻译:这3个技巧
- 允许用户把多个作业同时提交给计算机,2005年7月操作系统试题和答案
- 情绪调节的自适应_情绪定律:你的情绪决定你的一切
- C++知识点49——类继承与类的构造、拷贝、operator=和析构函数
- sql 排序_SQL聚合与排序