java、springboot 接口导出txt
就写两个方法
@Log @ApiOperation(value = "导出单码/箱码",produces = "application/octet-stream") @GetMapping(value = "/export") public void exportExcel(TraceBatchPageQuery page HttpServletResponse response){ Pagepages = 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) { MapparamMap = 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
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。