boot+vue.
Excel,Jason,xml,CSV格式上传并解析文件内容保存到数据库。并且页面显示解析的内容
1、Vue+Element UI上传组件上传文件
<el-upload
drag
ref="upload"
class="upload-demo"
:action="uploadDatasetUrl"//后端响应地址
:on-success='upLoadSuccess'//成功后的回调函数
:file-list="fileList"
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
</el-upload>
// 上传原始数据后,上传成功的回调函数 放在methods中
upLoadSuccess(response, file, fileList)
{
if (file != null) {
if (response.code !=0) {
console.log(response.code+response+file)
// 响应码不为0时,标识后台上传文件出错啦
file.status = 'error'
let fileName = file.name
file.name = file.name + '---上传失败'
this.$message({
type: 'error', message: fileName + '上传失败'
})
} else {
file.name = file.name + '---上传成功'
}
}
}
2、后端接收请求解析并入库
@RequestMapping(value = "/uploadFile",method = RequestMethod.POST)
@ApiOperation(value = "处理上传文件", notes = "处理上传文件", produces = MediaType.APPLICATION_JSON_VALUE)
public JsonResult<Void> save(@RequestParam("file") MultipartFile multipartFile) throws Exception {
File file = null;
file = File.createTempFile("tmp", null);
file.deleteOnExit();
if(multipartFile.getOriginalFilename().endsWith(".txt")){
BufferedReader reader = null;
String temp = null;
try {
multipartFile.transferTo(file); //MultipartFile转File
reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));//解决服务器上乱码
reader.readLine();
while ((temp = reader.readLine()) != null) {
YdywHourEntity ydywHourEntity = new YdywHourEntity();
String[] s = temp.split(",");
ydywHourEntity.setYh2g(s[0]);
ydywHourEntity.setYh4g(s[1]);
ydywHourService.save(ydywHourEntity);
}
}catch (Exception e){
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
else if(multipartFile.getOriginalFilename().endsWith(".csv")){
System.out.println(multipartFile.getOriginalFilename());
BufferedReader reader = null;
String temp = null;
try {
multipartFile.transferTo(file); //MultipartFile转File
reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "GBK"));//解决服务器上乱码
reader.readLine();
while ((temp = reader.readLine()) != null) {
YdywHourEntity ydywHourEntity = new YdywHourEntity();
String[] s = temp.split(",");
ydywHourEntity.setYh2g(s[0]);
ydywHourEntity.setYh4g(s[1]);
ydywHourEntity.setYhVolte(s[2]);
ydywHourService.save(ydywHourEntity);
}
}catch (Exception e){
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}else if(multipartFile.getOriginalFilename().endsWith(".xlsx")){
System.out.println(multipartFile.getInputStream());
List<YdywHourTemplate> ydywHourEntityList = ExcelUtils.importData(multipartFile, YdywHourTemplate.class);
System.out.println(ydywHourEntityList.toString());
if (ydywHourEntityList == null || ydywHourEntityList.size() == 0) {
throw new EIPException("导入失败,导入数据错误");
}
for(YdywHourTemplate ydywHourTemplate:ydywHourEntityList){
try{
YdywHourEntity ydywHourEntity = new YdywHourEntity();
BeanUtils.copyProperties(ydywHourEntity, ydywHourTemplate);
ydywHourEntity.setCjsj((new Date()));
ydywHourService.save(ydywHourEntity);
}catch (Exception e){
e.printStackTrace();
}
}
}
logger.info("处理上传文件");
return JsonResult.ok();
}
到出excel的工具类方法:此时的excel的有标题行和头行
public static <T> List<T> importData(MultipartFile file, Class<T> clazz) {
ImportParams params = new ImportParams();
params.setTitleRows(1);
params.setHeadRows(1);
params.setNeedVerify(true);
params.setVerifyGroup(new Class[]{AddGroup.class});
List<T> templateUserList = null;
try {
templateUserList = ExcelImportUtil.importExcel(file.getInputStream(), clazz, params);
} catch (Exception e) {
e.printStackTrace();
throw new EIPException("导入失败,请确定数据格式是否正确");
}
return templateUserList;
}