文章目录

  • 1. 文件导出
    • 1.1 导出实现方式
    • 1.2 导出实现场景
  • 2. 浏览器导出Excel
    • 2.1 废话
    • 2.2 导出Excel 接口
      • 2.2.1 启动类
      • 2.2.2 导出文件Controller 层
    • 2.3 Form 表单请求导出Excel
    • 2.4 Vue 导出Excel
      • 2.4.1 导出调用接口
      • 2.4.2 导出js 代码

1. 文件导出

1.1 导出实现方式

文件导出功能, 简单来说有两种实现方式:

  • 生成文件并直接下载文件, 导出一步实现;
  • 先生成文件, 再下载文件, 导出分两步实现;

1.2 导出实现场景

实现场景无非是, 用户触发导出动作, 后端接收请求, 处理业务数据, 引入poi 依赖, 生成Excel 文件;通过IO 流将文件写出, 可上传到服务器备份; 通过读取文件转换为字节流输出实现导出功能;
    如果考虑需要文件存档, 或者重要文件导出权限等功能时, 可以考虑设计导出任务和文件下载中心; 将导出与下载拆分为两个功能, 且可单独设置权限, 下载次数限制, 备份, 导出统计等功能.
    你可以根据具体场景适当的确定是否异步实现, 还是同步实现.

2. 浏览器导出Excel

2.1 废话

导出功能网上资源其实挺多的, 功能设计, 实现什么的代码也很全. 这里是找一个场景时没有找到合适的. 导致走了弯路, 这就很气.
    上面也说了, Excel 文件通过POI 去生成, 需求比较简单, 浏览器这边直接导出文件即可. 说明一下, 该场景下导出功能的实现和前端请求携带信息与资源请求方式有关.

2.2 导出Excel 接口

此处以Spring Boot 的前后端分离接口为例

2.2.1 启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}
2.2.2 导出文件Controller 层
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;/*** @ClassName: ExcelDownController* @Description: 文件下载服务端演示* @author: niaonao* @date: 2019/4/15*/
@RestController
@RequestMapping("/excel")
public class ExcelDownController {@PostMapping(value = "/download")public void downloadExcelFile(HttpServletResponse response) throws IOException {// 获取到服务器要下载文件的文件名和全路径, 此处模拟演示String fileName = "表格文件";String fileUrl = "D:\\表格文件.xlsx";// 清空bufferresponse.reset();response.setContentType("application/msexcel;charset=utf-8");// 客户使用目标另存为对话框保存指定文件response.setHeader("Content-disposition", "attachment;filename= " + URLEncoder.encode(fileName + "_EXCEL.xlsx", "UTF-8"));response.addHeader("Cache-Control", "no-cache");response.getOutputStream().write(getBytesByFile(fileUrl));response.getOutputStream().close();// 各种可能出现异常的请自行判断}// 将文件转换成Byte数组public byte[] getBytesByFile(String pathStr) {File file = new File(pathStr);try {FileInputStream fis = new FileInputStream(file);ByteArrayOutputStream bos = new ByteArrayOutputStream(1000);byte[] b = new byte[1000];int n;while ((n = fis.read(b)) != -1) {bos.write(b, 0, n);}fis.close();byte[] data = bos.toByteArray();bos.close();return data;} catch (Exception e) {e.printStackTrace();}return null;}
}

启动项目即可访问接口.
图2-2-1:

2.3 Form 表单请求导出Excel

此处以Form 表单的multipart/form-data 请求为例. 这个实现较为简单.
页面简单写个Html 即可如下

<form action="http://127.0.0.1:8080/excel/download"enctype="multipart/form-data"method="post"><input type="submit" value="ExcelDown">
</form>

通过浏览器打开html 文件, 点击导出按钮, 导出模拟服务器端的Excel 文件, 效果如下:
图2-3-1:

2.4 Vue 导出Excel

Vue 导出文件, 使用Blob 接收, 请求响应数据类型不同于Form 表单的multipart/form-data; 此处调用同样的导出接口, 模拟浏览器导出Excel 文件; Vue 使用Blob 和FileReader 接收文件流, 使用a 超链接处理导出Excel , 效果同图2-3-1

2.4.1 导出调用接口
  // 创建导出任务createExportTask: {url: 'http://127.0.0.1:8080/excel/download',method: 'post',responseType: 'blob',callback: function (res, resolve, reject) {/* 请求成功 */if (res.status === 200) {resolve(res)} else {/* 请求失败 */reject(res)}}}
2.4.2 导出js 代码
export default {,data: function () {return {}},props: {createExportTaskApi: {type: Object,default: function () {return this.$api.core.common.createExportTask}}},methods: {/*** 确定更新自定义文件名*/onSave: function () {this.$http.fetch(this.createExportTaskApi).then((res) => {let blob = new Blob([res.data])let reader = new FileReader()reader.readAsDataURL(blob)reader.onload = (e) => {let a = document.createElement('a')/* 默认文件名 */a.download = `表格文件.xlsx`a.href = e.target.resultdocument.body.appendChild(a)a.click()document.body.removeChild(a)}}).catch((resp) => {this.$notify.error(resp.msg || '导出文件失败')})}}
}
</script>

模拟浏览器下载Excel 到本地相关推荐

  1. python模拟浏览器下载文件_python第一个脚本,模拟浏览器下载文件 | 学步园

    用wget命令下载文件总是失败.用python脚本模拟浏览器下载,代码如下: #!/usr/bin/python import sys from urllib import FancyURLopene ...

  2. python模拟浏览器下载文件_python第一个脚本,模拟浏览器下载文件

    用wget命令下载文件总是失败.用python脚本模拟浏览器下载,代码如下: #!/bin/python # -*- coding: utf-8 -*- __author__ = 'wulong' i ...

  3. Springboot apache poi 浏览器下载 excel

    在日常干活中,经常会遇到后端实现下载文件的需求,将自己实现的步骤记录下来,以便以后查看方便或者帮助更多的同学. springboot POST 接口,支持浏览器下载excel文件,具体实现实现: 1. ...

  4. python 模拟浏览器下载文件-python爬虫:使用Selenium模拟浏览器行为

    前几天有位微信读者问我一个爬虫的问题,就是在爬去百度贴吧首页的热门动态下面的图片的时候,爬取的图片总是爬取不完整,比首页看到的少.原因他也大概分析了下,就是后面的图片是动态加载的.他的问题就是这部分动 ...

  5. python模拟浏览器下载文件在哪里_python下selenium模拟浏览器基础操作

    1.安装及下载 selenium安装: pip install selenium  即可自动安装selenium geckodriver下载:https://github.com/mozilla/ge ...

  6. JAVA 浏览器下载excel,自定义样式:合并单元格,设置多种背景填充颜色,冻结窗格

    添加依赖: <!-- POI --><dependency><groupId>org.apache.poi</groupId><artifactI ...

  7. webmagic+selenium模拟浏览器下载动态网页

    现在绝大多数网页都是动态生成的,那么学习爬虫就意味着更加困难.若是静态网页,只需要了解如何连接网络和分析网页源代码提取标签信息即可,但是动态网页的话,就需要使用到一些特定的框架来爬取了.比较实用的爬取 ...

  8. 解决浏览器下载excel文件时显示“文件已损坏”

    天天被学校的健康上报三个专业汇总搞得头大,一个班要截一个图,三个专业要十几个截图,一天三次,啊哈哈真是想快点毕业,其实健康系统上面有下载整个excel文件, but,每次点击导出之后,可以下载成功(我 ...

  9. 使用easyExcel实现浏览器下载Excel。

    之前在使用easyExcel的时候发现网上对于easyExcel web下载介绍比较少,所以我想着出个比较简单的文章帮助大家了解 easyExcel的使用. 一.首先我们需要导入pom依赖: < ...

最新文章

  1. opencv查找表值直方图均衡化
  2. java基础系列:集合基础(2)
  3. atexit注册进程终止处理函数
  4. [Linux] VIM 代码折叠
  5. jenkins 基础配置安装(Ⅰ)
  6. curl: (48) An unknown option was passed in to libcurl
  7. proxmox VE 4.4 增加USB 重定向功能
  8. 计算机硬盘搜索记录,怎么删除在电脑磁盘里搜索过文件 的记录
  9. TM1640的驱动及代码
  10. 计算机对学习的好处,学习计算机的好处
  11. [Shiro教程] Shiro 教程基于SSM(SpringMVC + Spring + Mybatis)EHCache版本
  12. 手眼标定_全面细致的推导过程
  13. 工欲善其事,必先利其器————每天十分钟搭建编程环境:Linux下设置雅黑-Consolas混合字体
  14. [附源码]java毕业设计时事资讯平台
  15. vim开启行号显示及全局设置
  16. oracle引用css报错,Oracle CSSCAN工具使用
  17. VMware安装银河麒麟V10桌面版虚拟机
  18. 推荐几个容易中的计算机EI源刊(基本百发百中)
  19. Virgo与Maven整合开发环境搭建(二)
  20. vue中使用echarts和百度地图实现飞机迁徙图

热门文章

  1. Jmeter-----保存到响应文件
  2. java swing组件_Java -- Swing 组件使用
  3. C语言提高代码效率的几种方法,7个提升嵌入式C代码效率的方法-嵌入式系统-与非网...
  4. 减缓衰老,让T细胞染色体“变长”就行,还能提高免疫力|Nature子刊
  5. SQL中UNPIVOT是什么
  6. java get请求405_get方法没问题,post方法报405错误
  7. 小程序成为多社交平台引流利器
  8. 平均值不等式证明(数学归纳法)
  9. MySQL无效的月份_ORACLE 插入时间时显示'无效的月份'的问题
  10. 机器学习中的归纳偏置