java、springboot 接口导出txt方式

java、springboot 接口导出txt

就写两个方法

@Log
    @ApiOperation(value = "导出单码/箱码",produces = "application/octet-stream")
    @GetMapping(value = "/export")
    public void exportExcel(TraceBatchPageQuery page HttpServletResponse response){
        Page 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());
    }
  /* 导出txt文件
     * @author
     * @param	response
     * @param	text 导出的字符串
     * @return
     */
    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:

        
            导入
            导出
        

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 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:

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);
                    }
                })
            },
}
 

前台导出

HTML: 

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');
},
 

总结:本篇主要记录了

(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> 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();
        }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

你可能感兴趣的:(java、springboot 接口导出txt方式)