返回顶部
首页 > 资讯 > 后端开发 > Python >java、springboot 接口导出txt方式
  • 661
分享到

java、springboot 接口导出txt方式

2024-04-02 19:04:59 661人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录java、SpringBoot 接口导出txt就写两个方法springboot 文件处理导入导出后台导入前台导入前台导出总结:本篇主要记录了java、springboot 接口导

java、springboot 接口导出txt

就写两个方法

@Log
    @apiOperation(value = "导出单码/箱码",produces = "application/octet-stream")
    @GetMapping(value = "/export")
    public void exportexcel(TraceBatchPageQuery page httpservletResponse response){
        Page<TraceBatchDto> pages = traceBatchService.pageByParam(page);
        if (page.getRecords().size()==0)
            throw new BusinessException("数据为空");
      
        for(TraceBatchDto dto:pages.getRecords()){
            if (type==0)
                text.append(dto.getQuantity());
            else
                text.append(dto.getPackQuantity());
            text.append("\r\n");//换行字符
        }
        //导出的文件存储目录
        ExportUtil.exportTxt(response,text.toString());
    }
  
    public static void exportTxt(HttpServletResponse response, String text,String name){
        response.setCharacterEncoding("utf-8");
        //设置响应的内容类型
        response.setContentType("text/plain");
        //设置文件的名称和格式
        response.addHeader("Content-Disposition","attachment;filename="
                + "data.txt");
        BufferedOutputStream buff = null;
        ServletOutputStream outStr = null;
        try {
            outStr = response.getOutputStream();
            buff = new BufferedOutputStream(outStr);
            buff.write(text.getBytes("UTF-8"));
            buff.flush();
            buff.close();
        } catch (Exception e) {
            //LOGGER.error("导出文件文件出错:{}",e);
        } finally {try {
            buff.close();
            outStr.close();
        } catch (Exception e) {
            //LOGGER.error("关闭流对象出错 e:{}",e);
        }
        }
    }

Springboot 文件处理导入导出

简单记录下使用Springboot进行文件与后端交互、excel前台导出等内容

这里用到了:elelemt-ui\html\Vue\Springboot框架

后台导入

HTML:

        <el-button-group>
            <el-button @click="importExcel()" size="small" type = "primary">导入</el-button>
            <el-button @click="exportExcel()" size="small">导出</el-button>
        </el-button-group>

javascript:响应importExcel弹窗,文件选择,遍历发送给后端

            importExcel: function () {
                this.upload();
                this.handleFile();
            },
            upload: function () {
                var inputObj = document.createElement('input');
                inputObj.setAttribute('id', 'file');
                inputObj.setAttribute('type', 'file');
                inputObj.setAttribute('name', 'file');
                inputObj.setAttribute("style", 'visibility:hidden');
                document.body.appendChild(inputObj);
                inputObj.value;
                inputObj.click();
                console.log(inputObj);
            },
            //处理文件
            handleFile: function () {
                document.querySelector('#file').addEventListener('change', function (e) {
                    for (let entry of e.target.files) {
                        //处理files
                        var fd = new FORMData();
                        fd.append('file', entry);
                        fd.append('type', dotType+'dot_Detail');
                        fd.append('params', JSON.stringify({master_id:dotId,type:dotType}));
                        $.ajax({
                            url: "url", //请求的url地址
                            dataType: "json", //返回格式为json
                            async: false,//请求是否异步,默认为异步,这也是ajax重要特性
                            data: fd, //参数值
                            type: "POST", //请求方式
                            contentType: false,// 不设置Content-Type请求头
                            processData: false,// 不处理发送的数据
                            success: function (res) { 
                            },
                            error: function (XMLHttpRequest, textStatus, errorThrown) { 
                            }
                        });
                    }
                })
            },

Java:接收前端FormData()中包含的file\type\params字段,利用file在业务中使用POI或者Easy这样的做导入功能开发

    @Autowired
    ExcelServiceImpl excelService;
 
    @RequestMapping("/read")
    @ResponseBody
    public ResposeObject read(@RequestParam MultipartFile file, String type, String params) {
        Map<String,Object> paramMap = JSONObject.parseObject(params,Map.class);
        try {
            if (file != null) {
                InputStream ins = file.getInputStream();
                excelService.read(ins,type,paramMap);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ResposeHelper.ok("ok");
    }

前台导入

HTML:

            <a v-on:click="importExcel()" href="javascript:void(0);" rel="external nofollow"  rel="external nofollow"  >
                从excel导入...
            </a>

Javascript:

data: function () {
            return {
                dataList: [
                    {
                        addr: '',
                        code: '',
                        start: '',
                        length: '',
                        crc: '',
                        rate: '',
                        state: ''
                    }
                ],
    }
}
mothods:{ 
            importExcel: function () {
                this.upload();
                this.handleFile();
            },
 
            upload: function () {
                var inputObj = document.createElement('input');
                inputObj.setAttribute('id', 'file');
                inputObj.setAttribute('type', 'file');
                inputObj.setAttribute('name', 'file');
                inputObj.setAttribute("style", 'visibility:hidden');
                document.body.appendChild(inputObj);
                inputObj.value;
                inputObj.click();
                console.log(inputObj);
                inputObj.value = '';
            },
            //处理文件
            handleFile: function () {
                document.querySelector('#file').addEventListener('change', function (e) {
                    for(let entry of e.target.files){
                        readFile(entry);
                    }
                })
            },
}
 
<script type="text/javascript">
   //循环读取文件触发parseXlsxObject方法操作业务
   function readFile(file) {
        var name = file.name;
        var reader = new FileReader();
        reader.onload = function (e) {
            var data = e.target.result;
            var wb = XLSX.read(data, {type: "binary"});
            parseXlsxObject(wb);
        };
        reader.readAsBinaryString(file);
    }
//实现导入到前端的List变量
function parseXlsxObject(wb) {
        var sheet = wb.Sheets.Sheet1;
        var json = XLSX.utils.sheet_to_json(sheet);
        json.forEach(function (value) {
            var item = {
                addr: value['地址位'],
                code: value['模式'],
                start: value['起始地址'],
                length: value['长度'],
                crc: value['crc校检'],
                rate: value['频率'],
                state: value['启用状态']
            }
            this.dataList.push(item);
        });
 
        
    }
</script>

前台导出

HTML: 

            <a v-on:click="exportExcel()" href="javascript:void(0);" rel="external nofollow"  rel="external nofollow"  >
                导出到excel...
            </a>

Javascript:响应导出按钮,将list通过xls的方法aoa_to_sheet导出为excel文档

exportExcel: function () {
    var settingsArray = [['地址位','模式','起始地址','长度','crc校检','频率','启用状态']];
    this.dataList.forEach(function (row) {
    var settingArr = [row.addr,row.code,row.start,row.length,row.crc,row.rate,row.state];
            settingsArray.push(settingArr);
        });
        var sheet = XLSX.utils.aoa_to_sheet(settingsArray);
        openDownloadDialog(sheet2blob(sheet), '导出.xlsx');
},
 
<script>
    
    function openDownloadDialog(url, saveName)
    {
        if(typeof url == 'object' && url instanceof Blob)
        {
            url = URL.createObjectURL(url); // 创建blob地址
        }
        var aLink = document.createElement('a');
        aLink.href = url;
        aLink.download = saveName || ''; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
        var event;
        if(window.MouseEvent) event = new MouseEvent('click');
        else
        {
            event = document.createEvent('MouseEvents');
            event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
        }
        aLink.dispatchEvent(event);
    }
 
    // 将一个sheet转成最终的excel文件的blob对象,然后利用URL.createObjectURL下载
    function sheet2blob(sheet, sheetName) {
        sheetName = sheetName || 'Sheet1';
        var workbook = {
            SheetNames: [sheetName],
            Sheets: {}
        };
        workbook.Sheets[sheetName] = sheet;
        // 生成excel的配置项
        var wopts = {
            bookType: 'xlsx', // 要生成的文件类型
            bookSST: false, // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本iOS设备上有更好的兼容性
            type: 'binary'
        };
        var wbout = XLSX.write(workbook, wopts);
        var blob = new Blob([s2ab(wbout)], {type:"application/octet-stream"});
        // 字符串转ArrayBuffer
        function s2ab(s) {
            var buf = new ArrayBuffer(s.length);
            var view = new Uint8Array(buf);
            for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
            return buf;
        }
        return blob;
    }
</script>

总结:本篇主要记录了

(1)前端上传文件给后端multipart格式的方法 

(2)前端利用xls.js从excel文档导入数据到json数组变量的方法

(3)前端利用xls.js将json数组导出到excel文档下载的方法

上述代码可以优化,暂时贴成这样,以后有这样的需求可以快速cv使用。

后续有时间可以多熟悉xls.js,Apache的POI和阿里巴巴的EasyExcel,都是相关的内容

最后再贴一个用EasyExcel后台将后台生成的List数据导出的方法,可以用

window.location.href= [后台导出的地址]  这种方式进行后端导出,注意设置response的格式

        try (ServletOutputStream out = response.getOutputStream()) {
            //这三行不可缺,否则会被前端解析成乱码数据,而不是文件
            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("utf-8");
            response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(sheetName, "UTF-8")
                    + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + ".xlsx");
 
            RowModel rowModel = excelService.getExcelModel(type);
            List<Map<String,Object>> list = rowModel.exportData(paramsMap);
            List rowModelList = JSONObject.parseArray(JSONObject.toJSONString(list),rowModel.getClass())
            ExcelWriter writer = EasyExcelFactory.getWriter(out);
            WriteSheet ws = new WriteSheet();
            ws.setSheetName(sheetName);
            ws.setClazz(rowModel.getClass());
            writer.write(rowModelList, ws);
            writer.finish();
            out.flush();
        } catch (IOException e) {
            throw new RuntimeException();
        }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: java、springboot 接口导出txt方式

本文链接: https://lsjlt.com/news/163867.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java、springboot 接口导出txt方式
    目录java、springboot 接口导出txt就写两个方法Springboot 文件处理导入导出后台导入前台导入前台导出总结:本篇主要记录了java、springboot 接口导...
    99+
    2024-04-02
  • Vue请求后端接口导出excel表格方式
    目录vue请求后端接口导出excel调用后端接口导出excel无效果,直接访问后端url可以controller层代码    serviceImpl代码...
    99+
    2024-04-02
  • 2023最新SpringBoot导出PDF方式(模板方式)
    一、前期准备 在开发中经常会遇到需要进行对一些数据进行动态导出PDF文件,然后让用户自己选择是否需要打印出来,这篇文章我们来用个相对来说比较简单的方式来实现PDF动态导出; 导入依赖 S...
    99+
    2023-09-10
    spring boot pdf java
  • springboot 接口版本区分方式
    目录springboot 接口版本区分一、新建springboot项目二、实现自定义版本控制的代码三、编写测试的控制器四、测试demospringboot 两个版本的差异一、WebM...
    99+
    2024-04-02
  • SpringBoot使用protobuf格式的接口方式
    SpringBoot使用protobuf格式的接口 建立SpringBoot项目,pom.xml内容如下: <?xml version="1.0" encoding...
    99+
    2024-04-02
  • [20191112]oracle共享连接模式端口.txt
    [20191112]oracle共享连接模式端口.txt--//如果使用共享服务模式,你可以发现每次重启数据库对应的端口号会发生变化.# netstat -tunlp | egrep "Active|Proto|ora_[ds]"Activ...
    99+
    2019-02-24
    [20191112]oracle共享连接模式端口.txt
  • Postman如何导出接口的几种方法
    目录前言:正文:一、新建接口文件夹二、新建的接口存到文件夹里,这样才可以把接口管理起来,一起导出来三、如何把接口文件夹里的接口整体导出四、如何导入之前保存的接口文件三、遇到的坑总结:...
    99+
    2024-04-02
  • java的接口解耦方式
    目录java的接口解耦方式举例子java接口解耦效果的理解先看一段代码java的接口解耦方式 我只想把抽象的东西说的具体,或者说,听起来简单些,明白些。。。 学过java的人都知道,...
    99+
    2024-04-02
  • SpringBoot如何使用protobuf格式的接口方式
    这篇文章主要介绍“SpringBoot如何使用protobuf格式的接口方式”,在日常操作中,相信很多人在SpringBoot如何使用protobuf格式的接口方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-06-20
  • [20191113]oracle共享连接模式端口2.txt
    [20191113]oracle共享连接模式端口2.txt--//昨天的测试链接:http://blog.itpub.net/267265/viewspace-2663651/=>[20191112]oracle共享连接模式端口.txt -...
    99+
    2015-12-08
    [20191113]oracle共享连接模式端口2.txt
  • Springboot导出文件,前端下载文件方式
    Springboot导出文件,前端下载文件 后端代码 可以把请求设置为post,我这里是Get @RequestMapping(value = "/download", met...
    99+
    2024-04-02
  • java对接webservice接口的四种方式
    这两天一直在做外系统对接,对方的接口是webservice的形式,调用起来有些蛋疼,于是在这里记录一下我尝试过的调用WebService的三种方式。 方式一:以HttpURLConnection的方式调用 String url ="http...
    99+
    2023-10-21
    java python 开发语言
  • Springboot打印接口的三种方式分享
    目录1 aop切面的方式 1.1 实现思路1.2 代码实现1.3 功能测试2 过滤器的方式3 拦截器的方式1 aop切面的方式  1.1 实现思路 引入aop依赖...
    99+
    2022-11-13
    Springboot打印接口方式 Springboot打印接口的
  • Springboot实现导入导出Excel的方法
    目录一、添加poi的maven依赖二、自定义注解(Excel属性标题、位置等)三、CustomExcelUtils编写四、定义导出实体类五、Controller层代码编写一、添加po...
    99+
    2024-04-02
  • Java基于注解的Excel导出方式
    目录Java注解的Excel导出java简单的导出excel总结Java注解的Excel导出 依赖:  <dependency>             <grou...
    99+
    2023-01-09
    Java注解 Java的Excel导出 Java Excel导出
  • 使用SpringBoot + Redis 实现接口限流的方式
    目录配置限流注解定制 RedisTemplateLua 脚本注解解析接口测试全局异常处理Redis 除了做缓存,还能干很多很多事情:分布式锁、限流、处理请求接口幂等性。。。太多太多了...
    99+
    2024-04-02
  • SpringBoot调用外部接口的方式有哪些
    这篇文章主要介绍了SpringBoot调用外部接口的方式有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot调用外部接口的方式有哪些文章都会有所收获,下面我们一起来看看吧。1、简介Sprin...
    99+
    2023-07-05
  • java导出excel 浏览器直接下载或者或以文件形式导出
    看代码吧~ public static void exportExcelByDownload(HSSFWorkbook wb,HttpServletResponse httpS...
    99+
    2024-04-02
  • springboot 接收LocalDateTime方式
    目录1.标准日期格式转换2.非json请求时间戳转换3.json请求时间戳转换4.序列化扩展5.swagger支持本文基于jdk8。 1.标准日期格式转换 本类型是指前端传递类似&q...
    99+
    2024-04-02
  • SQL SERVER导出TXT文本文件的方法有哪些
    本篇内容主要讲解“SQL SERVER导出TXT文本文件的方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL SERVER导出TXT文本文件的方法有...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作