java、springboot 接口导出txt方式

网友投稿 1349 2022-08-31


java、springboot 接口导出txt方式

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

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:

从excel导入...

Javascript:

data: function () {

return {

dataList: [

http:// {

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:

导出到excel...

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

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python之错误码设计(python报错大全)
下一篇:Django+SimpleUI(django simpleui 自定义菜单)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~