前后端分离,vue+springboot导出dbf
一、引入pom
<dependency><groupId>com.github.albfernandez</groupId><artifactId>javadbf</artifactId><version>1.9.4</version>
</dependency>
二、导出DBF的工具类
import com.linuxense.javadbf.DBFDataType;
import com.linuxense.javadbf.DBFField;
import com.linuxense.javadbf.DBFWriter;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Field;
import java.net.URLEncoder;
import java.util.Date;
import java.util.List;
import java.util.Map;/*** 导出dbf文件工具类** @author yangfeng*/
public class ExportDbfUtil {/*** @param fileName 文件名* @return* @throws IOException*/private static ServletOutputStream generateResponseDBF(String fileName, HttpServletResponse response) throws IOException {fileName = URLEncoder.encode(fileName, "UTF-8");response.setContentType("application/vnd.ms-excel;charset=utf-8");response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".dbf");return response.getOutputStream();}/*** 写入数据到dbf文件* 反射获取类型的字段名称、类型,生成dbf fields** @param beans 数据集* @param clazz 数据集所属类型* @param dbfName dbf文件名* @param response*/public static void writeDbf(List beans, Class clazz, String dbfName, HttpServletResponse response) {DBFWriter writer = null;try {writer = new DBFWriter(generateResponseDBF(dbfName, response));writer.setCharactersetName("GBK");//防止导出中文乱码DBFField[] dbfFields = writeFields(clazz);writer.setFields(dbfFields);for (int i = 0; i < beans.size(); i++) {writer.addRecord(writeLine(beans.get(i), dbfFields));}writer.close();} catch (Exception e) {e.printStackTrace();} finally {try {} catch (Exception e) {writer.close();}}}/*** 设置写入dbf文件字段名称、类型、长度** @param clazz* @return*/private static DBFField[] writeFields(Class clazz) {Field[] clazzDeclaredFields = clazz.getDeclaredFields();DBFField[] fields = new DBFField[clazzDeclaredFields.length];for (int i = 0; i < clazzDeclaredFields.length; i++) {clazzDeclaredFields[i].setAccessible(true);fields[i] = new DBFField();fields[i].setName(clazzDeclaredFields[i].getName());if (clazzDeclaredFields[i].getType() == Integer.class) {fields[i].setType(DBFDataType.NUMERIC);} else if (clazzDeclaredFields[i].getType() == Double.class) {fields[i].setType(DBFDataType.DOUBLE);} else if (clazzDeclaredFields[i].getType() == Date.class) {fields[i].setType(DBFDataType.DATE);} else {fields[i].setType(DBFDataType.CHARACTER);}fields[i].setLength(20);//长度要设置,不然生成的dbf文件打不开,格式错误}return fields;}/*** 返回每行匹配的数据** @param bean 一条数据* @param dbfFields dbf字段信息数组,这里主要是获取封装的字段名称* 根据名称取值* @return*/private static Object[] writeLine(Object bean, DBFField[] dbfFields) {Map<String, Object> map = MapBeanUtil.beanToMap(bean);Object[] row = new Object[bean.getClass().getDeclaredFields().length];for (int i = 0; i < dbfFields.length; i++) {row[i] = map.get(dbfFields[i].getName());}return row;}}
三、service API
/*** 导出数据dbf** @param request* @return*/@Overridepublic void exportDataToDBF(DataRequest request, HttpServletResponse response) {List<Data> testList= testCustomizedMapper.getData(request);if (!CollectionUtils.isEmpty(testList)) {ExportDbfUtil.writeDbf(testList, Data.class, "测试", response);}}
四、vue 请求接口
services:
//导出dbf
function exportDbf(data) {return xAxios({url: '/datastatistics/flightLdp/exportFlightLdpToDBF',method: 'POST',data: data,responseType: 'blob'});
}
store actions:
//导出exportDbf({ commit }, payload) {return new Promise((resolve, reject) => {exportDbf(payload).then(res => {var disposition = res.headers['content-disposition'];var fileName = decodeURI(disposition.substring(disposition.indexOf('filename=') + 9, disposition.length));const link = document.createElement('a');let blob = new Blob([res.data],{type: 'application/vnd.ms-excel'});link.style.display = 'none';var href =URL.createObjectURL(blob);link.href =href;link.setAttribute('download', fileName);document.body.appendChild(link);link.click();document.body.removeChild(link);window.URL.revokeObjectURL(href); //释放掉blob对象});});}
前后端分离,vue+springboot导出dbf相关推荐
- 学生选课系统 前后端分离 vue springboot
学生选课系统 前后端分离 vue springboot 系统描述 一.系统功能 二.系统截图 1.网络爬虫 新闻获取代码 2.pom 源码 系统描述 基于spring boot vue的学生选课系统 ...
- Java实现图片上传功能(前后端:vue+springBoot)
Java实现图片上传功能(前后端:vue+springBoot) 前言: 前端: 组件引入 基础文件上传 自定义上传方法 后端: 需要引入的jar包: 基础文件上传 Controller层: serv ...
- 单realm模式下前后端分离实现springboot+shiro+jwt+vue整合
shiro+jwt实现前后端分离 一.RBAC概念 基于角色的权限访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注.在R ...
- Nginx实现前后端分离(springboot+vue)+双机互备
背景介绍 项目采用springboot+vue开发,之 前项目布署时,都是采用pom中配置,把vue打包的dist文件copy到springboot项目中resource/static下做的,这样每次 ...
- Vue iView Admin 动态路由菜单加载 前后端分离(springboot 2.x iview admin vue 前后端分离 模型设计器 动态数据权限...
宣传官网 xb.exrick.cn 在线Demo xboot.exrick.cn 开源版Github地址 github.com/Exrick/x-bo- 开发文档 www.kancloud.cn/ex ...
- 前后端分离:SpringBoot治好了我的时间内耗
1.前后端分离为了什么 1.1前言 本文作为系列文章的第一篇,是铁柱在工作之余对自我学习的总结,以下内容是搭建基础的前后端分离的Demo来展开的,需要对MySQL,Spring,SpringMVC ...
- 前后端分离,SpringBoot如何实现验证码操作
验证码的功能是防止非法用户恶意去访问登录接口而设置的一个功能,今天我们就来看看在前后端分离的项目中,SpringBoot是如何提供服务的. SpringBoot版本 本文基于的Spring Boot的 ...
- 前后端分离:vue项目部署服务器操作步骤详细
部署前端项目vue到服务器 首对应的是找到项目 进入对应的目录下 进行 npm run build 会生成一个dist文件 将整个dist文件上传到服务器就可以了 然后就是首先就是安装node.js ...
- 实现前后端分离-vue
1.vue 我们之前的vue和我们的java代码是不是都在一个工程下.没有做到前后端完成分离.企业中前端也会由自己的服务器,也有自己的开发工具. 前端服务器Nodejs 开发工具VsCode[我们为了 ...
- 从壹开始前后端分离 [ vue + .netcore 补充教程 ] 三十║ Nuxt实战:动态路由+同构...
上期回顾 说接上文<二九║ Nuxt实战:异步实现数据双端渲染>,昨天咱们通过项目二的首页数据处理,简单了解到了 nuxt 异步数据获取的作用,以及亲身体验了几个重要文件夹的意义,整篇文章 ...
最新文章
- Linux系统守护进程详解
- 生成SLUTION MANAGER KEY 的ABAP程序
- 用 node.js 脚本替代复杂的 npm script
- c语言打程序时会遇到什么问题,Sublime text3 实现C语言编译运行以及过程中可能遇到的问题...
- 21最难调剂年:150万人参加调剂,预扩招18万人!
- H5 新特性之 fileReader 实现本地图片视频资源的预览
- AutoCAD(英文版)中所有英语词汇的翻译
- 新旧Oracle客户端连接远程oracle数据库
- java计算机毕业设计校园流浪猫图鉴管理系统的设计与实现源码+数据库+系统+lw文档+部署
- 分辨率,像素,像素密度易懂
- 手机关闭浏览器html,如何解除手机浏览器网页限制?
- Linux下文件压缩、打包,看这一篇就够了
- R语言绘图-gganimate 让你的统计图动起来
- 通俗理解LDA主题模型(转)
- 怎么把字母缩小当符号_iPhone自带输入法怎么用 iPhone自带输入法小技巧【详解】...
- Linux安装谷歌浏览器chrome
- 人民币大写与数字互转
- HTML5期末大作业:运动系列——NBA篮球主题学生网页设计(7个页面) HTML+CSS+JavaScript 体育网页设计HTML代码 学生网页课程设计期末作业下载 大学生网页设计制作成
- 海伦司圆梦上市:徐炳忠身价超过奈雪的茶掌门人,未来能否坚挺?
- android中自定义 toast,android 自定义Toast