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 List
upload(@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 List
readCsvFile(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秒