
Spring上传文件(upload files)
发布日期:2021-05-07 13:36:05
浏览次数:23
分类:精选文章
本文共 3509 字,大约阅读时间需要 11 分钟。
前端实现:
可以使用iView组件,实现文件的选择与上传,话不多说,直接上代码(注意,action中的路径及后端接收的路径,name即@RequestParam,通过name后端获取相应文件):同样也可以写一个很简单的html用于前端上传文件:
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>单文件上传
后端springboot可以通过MultipartFile对传输的文件进行接收,MultipartFile的进行pom引入及Configuration的配置即可:
@Configurationpublic class FileUploadConfiguration { @Bean public MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); // 设置文件大小限制 ,超出设置页面会抛出异常信息, // 这样在文件上传的地方就需要进行异常信息的处理了; factory.setMaxFileSize("1024MB"); // KB,MB /// 设置总上传数据总大小 factory.setMaxRequestSize("1024MB"); // Sets the directory location where files will be stored. // factory.setLocation("路径地址"); return factory.createMultipartConfig(); }}
这样就可以在Controller直接通过MultipartFile对前端传来的文件进行接收及相关处理操作:
@RestController("/test")public class FileUploadController { @Autowired private EtymonService etymonService; @PostMapping public Listupload(@RequestParam("etymon") MultipartFile multipartFile) throws IOException{ if (!multipartFile.isEmpty()) { File convFile = new File(multipartFile.getOriginalFilename()); Integer lobId = Integer.valueOf(convFile.getName().replace(".csv", "")); convFile.createNewFile(); FileOutputStream fos = new FileOutputStream(convFile); fos.write(multipartFile.getBytes()); fos.close(); List list = readCsvFile(convFile); convFile.delete(); //删除文件,如不需要删除,去掉即可 List etymons = new ArrayList<>(); for (String[] fields : list) { Etymon etymon = Etymon.builder().lobId(lobId).cnName(fields[0]) .enName(fields[1]) .tag(fields[3]) .description(fields[4].equals("") ? null : fields[4]).build(); etymon.setCreatedBy(fields[2]); etymons.add(etymon); } // 数据库操作,写入数据 return etymonService.bulkSave(etymons, UserUtils.getUser().getLogin()); } return null; }}
此处以csv格式的文件为例子,因此在MultipartFile获取到文件之后,需要对文件进行解析,解析出相关字段,写入数据库,对于csv文件的解析,我们可以使用opencsv,pom引入相关配置即可使用:
com.opencsv opencsv ${opencsv.version}
对opencsv相关操作的封装:
public class CsvFileUtil { private CsvFileUtil() { } public static ListreadCsvFile(File csvFile) throws IOException{ List list = new ArrayList(); FileReader fileReader = null; BufferedReader bufferedReader = null; try { fileReader = new FileReader(csvFile); bufferedReader = new BufferedReader(fileReader); CSVReader csvReader = new CSVReader(bufferedReader); list = csvReader.readAll(); } catch (IOException e) { throw e; } finally { bufferedReader.close(); } return list; }}
至此,一个前端选择文件上传,后端对文件进行解析并写入数据库的功能就开发完成了,实现效果:
(1)界面
(2)点击button,选择文件并上传

(3)后台处理数据,并将写入数据库的数据返回,在前端进行展示
例如平时的数据导入,数据迁移等相关工作都可以通过这种界面化的方式而实现(emmmm,一定有的人还是觉得直接写个脚本更方便些,233333333)
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月08日 22时19分27秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
.NET应用框架架构设计实践 - 概述
2021-05-09
Rust 内置 trait :PartialEq 和 Eq
2021-05-09
Hibernate(十四)抓取策略
2021-05-09
[菜鸟的设计模式之旅]观察者模式
2021-05-09
Spring-继承JdbcDaoSupport类后简化配置文件内容
2021-05-09
Java基础IO流(一)
2021-05-09
Hibernate入门(四)---------一级缓存
2021-05-09
MySQL事务(学习笔记)
2021-05-09
一个web前端开发者的日常唠叨
2021-05-09
内存分配-slab分配器
2021-05-09
技术写作技巧分享:我是如何从写作小白成长为多平台优秀作者的?
2021-05-09
Jupyter Notebook 暗色自定义主题
2021-05-09
[Python学习笔记]组织文件
2021-05-09
基于Redo Log和Undo Log的MySQL崩溃恢复流程
2021-05-09
从RocketMQ的Broker源码层面验证一下这两个点
2021-05-09
如何正确的在项目中接入微信JS-SDK
2021-05-09
纵览全局的框框——智慧搜索
2021-05-09
快服务流量之争:如何在快服务中占领一席之地
2021-05-09
【活动】直播揭秘<如何从0开发HarmonyOS硬件>
2021-05-09
Unity平台 | 快速集成华为性能管理服务
2021-05-09