vue+Element组件上传文件,springboot获取文件进行并插入数据库操作
2020-06-03 04:37
447 查看
*最近有个需求就是在对文件(.txt)进行查库操作,文件里面的数组有一定的格式,但数组间隔没有格式,比如在换行时数组一部分在第一行另一部分在第二行。
在前端用elment的upload组件进行上传。
<template> <el-upload class="upload-demo" action="/export" :on-preview="handlePreview" :on-remove="handleRemove" :before-remove="beforeRemove" multiple :limit="3" :on-exceed="handleExceed" :file-list="fileList"> <el-button size="small" type="primary">点击上传</el-button> <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> </el-upload> </template> <script> export default { name: "Login", data(){ return{ fileList:[] } }, methods:{ handleRemove(file, fileList) { console.log(file, fileList); }, handlePreview(file) { console.log(file); }, handleExceed(files, fileList) { this.$message.warning(`当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`); }, beforeRemove(file, fileList) { return this.$confirm(`确定移除 ${ file.name }?`); } } } </script>
*后端使用的springboot。
bean:
package org.java.convert.bean; import lombok.Data; import tk.mybatis.mapper.annotation.KeySql; import javax.persistence.*; @Data @Table(name="c_change") public class Change { private String content_title; private String content_one; private String content_two; private String content_three; private String content_four; private String content_five; private String content_six; private String content_seven; private String content_eight; private String content_nine; }
cotroller:
@PostMapping("/export") public RespBean importData(@RequestParam(value = "file")MultipartFile[] files) throws IOException{ List<Change> list = POIUtils.textChange(files); if (changeService.addChangeDatas(list)==list.size()){ return RespBean.ok("上传成功!"); } return RespBean.error("上传失败!"); }
service:
@Service public class ChangeService { @Autowired ChangeMapper changeMapper; public Integer addChangeDatas(List<Change> list) { return changeMapper.addChangeDatas(list); } }
mapper:
public interface ChangeMapper { Integer addChangeDatas(@Param("list")List<Change> list); }
xml:
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="org.java.convert.mapper.ChangeMapper"> <insert id="addChangeDatas" > insert into c_change(content_title,content_one,content_two,content_three,content_four,content_five,content_six,content_seven,content_eight,content_nine) values <foreach collection="list" separator="," item="emp"> (#{emp.content_title,jdbcType=VARCHAR},#{emp.content_one,jdbcType=VARCHAR}, #{emp.content_two,jdbcType=VARCHAR},#{emp.content_three,jdbcType=VARCHAR},#{emp.content_four,jdbcType=VARCHAR}, #{emp.content_five,jdbcType=VARCHAR},#{emp.content_six,jdbcType=VARCHAR},#{emp.content_seven,jdbcType=VARCHAR}, #{emp.content_eight,jdbcType=VARCHAR},#{emp.content_nine,jdbcType=VARCHAR}) </foreach> </insert> </mapper>
对文件处理的方法:
package org.java.convert.utils; import org.apache.commons.io.FileUtils; import org.java.convert.bean.Change; import org.springframework.web.multipart.MultipartFile; import java.io.*; import java.util.ArrayList; import java.util.List; public class POIUtils { public static List<Change> textChange(MultipartFile[] files) { List<Change> list = new ArrayList<>(); Change change = null; if (null != files && files.length > 0) { for (MultipartFile file : files) { try { //获取后缀名 .jpg .txt String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().indexOf(".")); //生成临时目录 File savedFile = new File("D:\\test\\" + file.getOriginalFilename()); // 判断路径是否存在,不存在则新创建一个 if (!savedFile.getParentFile().exists()) { savedFile.getParentFile().mkdirs(); } FileUtils.copyInputStreamToFile(file.getInputStream(), savedFile); InputStream inputStream = new FileInputStream(savedFile); BufferedInputStream bis = new BufferedInputStream(inputStream); BufferedReader in = new BufferedReader(new InputStreamReader(bis, "utf-8"), 10 * 1024 * 1024); String read = ""; String txt = ""; while ((read = in.readLine()) != null) { txt += read; } String[] arr = txt.split("NR01"); for (int k = 1; k < arr.length; k++) { String ls = arr[k]; String[] ar = ls.split(" "); change = new Change(); change.setContent_title("NR01"); change.setContent_one(ar[1]); change.setContent_two(ar[2]); change.setContent_three(ar[3]); change.setContent_four(ar[4]); change.setContent_five(ar[5]); change.setContent_six(ar[6]); change.setContent_seven(ar[7]); if (ar[8] == null) { change.setContent_eight(null); } change.setContent_eight(ar[8]); if (ar[9] == null) { change.setContent_nine(null); } change.setContent_nine(ar[9]); list.add(change); //把从文件中读取的数据存到内存里 } //关闭流,才能进行删除临时文件 inputStream.close(); //程序结束时,删除临时文件 deleteFile(savedFile.getAbsolutePath()); } catch (IOException e) { e.printStackTrace(); } } } } public static boolean deleteFile(String fileName){ File file = new File(fileName); if(file.isFile() && file.exists()){ Boolean succeedDelete = file.delete(); if(succeedDelete){ System.out.println("删除单个文件"+fileName+"成功!"); return true; } else{ System.out.println("删除单个文件"+fileName+"失败!"); return true; } }else{ System.out.println("删除单个文件"+fileName+"失败!"); return false; } }}
因为我需要把txt文件进行解析,而我从前端获得到的文件形式是MultipartFile。而我需要的是file文件形式,于是我需要进行转换。我使用的方法是在本地生成一个路径,然后把从前端传来的文件进行存储,再重本地获取文件。关闭流后再用一个删除的方法进行文件删除。
还有一个要点是当我解析文本数据时,我需要的数组可能不在同一行,而我使用的方法是用readline读取行来写的,于是我就一行一行的拼接起来再进行split方法对数据进行拆分。
相关文章推荐
- 使用smartUpload组件进行文件上传以及获取文本数据
- vue项目中element upload上传zip之后获取zip中的text文件内容
- 在项目中使用SmartUpload组件可以进行文件的上传和下载操作
- Struts2+poi实现Excel文件上传并插入数据库的操作
- element-ui中upload组件获取上传文件信息
- Vue通过操作Dom元素 实现 拖拽文件到网页进行文件上传【JS/JQ 原理也是一样的】
- vue + element-ui + springboot + 阿里云OSS 使用表单进行图片文件等的上传(具有上传滚动条效果)
- 利用SA FileUp组件进行多文件上传
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- day03-spring与数据库操作的框架解析即dataSource的获取(JDBC)、使用spring中已经有的事务进行JDBC操作
- 利用fileupload组件进行文件上传
- 教大家用FTPClient对ftp文件进行上传下载等操作
- Hibernate动态建表,通过hbm.xml配置文件创建数据表,进行数据库操作, 动态模型
- 利用commons-fileupload组件上传文件至服务器和数据库(ZT)
- Java获取网络文件并插入数据库
- 上传文件并对数据进行校验,持久化到数据库中
- 利用dbcp数据库连接池连接数据库,并利用dbtuils框架对数据库test中book表进行插入、删除、修改、查询的操作。book表结构如下:(id,name,price,author,descrip
- JDBC实现数据库的几种基本操作(查询,分页查询,根据关键字进行查询以及插入数据)
- 使用oledb对数据库进行增删改查及批量插入操作
- SqlSession的获取及对数据库执行插入操作