Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SpringBoot实现多文件上传

SpringBoot实现多文件上传

作者头像
jwangkun
发布于 2021-12-23 09:20:50
发布于 2021-12-23 09:20:50
2.9K00
代码可运行
举报
文章被收录于专栏:John Wong's BlogJohn Wong's Blog
运行总次数:0
代码可运行

Spring Boot默认上传的单个文件大小1MB,一次上传的总文件大小为10MB

单个文件上传使用MultipartFile参数来接收文件,多文件使用MultipartFile[]数组来接收,然后遍历它,当成单文件来处理。

问题一:如何配置上传文件大小限制?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Configuration
public class FileConfig implements WebMvcConfigurer {
    @Bean
    public MultipartConfigElement multipartConfigElement(){
        MultipartConfigFactory factory = new MultipartConfigFactory();
        // 单个文件大小
        factory.setMaxFileSize(DataSize.parse("10240MB"));
        // 上传的总文件大小
        factory.setMaxRequestSize(DataSize.parse("20480MB"));
        return factory.createMultipartConfig();
    }
}

思考:SpringBoot项目推荐使用jar包的方式来运行项目,而实际应用中我们也发现jar包运行项目更加方便。但是当打完jar包后,这个jar的大小就固定好了,上传的文件肯定传不到jar包里面了。SpringBoot提供了一种方式,将文件上传到服务器物理路径下,然后做个映射关系,让图片可以正常被访问,具体操作如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Configuration
public class FileConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {        registry.addResourceHandler("/static/**").addResourceLocations("file:"+"D://uploadfile/");
    }
}

addResourceHandler("/static/**")表示访问路径为/static/文件名,addResourceLocations("file:"+"D://uploadfile/")表示文件存储的物理路径,"file:"为固定写法。

文件上传后台实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@RestController
@Slf4j
public class FileUpload {

    @PostMapping("uploadFile")
    public List uploadFile(@RequestParam("files") MultipartFile[] files) {

        // 存储上传成功的文件名,响应给客户端
        List<String> list = new ArrayList<>();
        // 判断文件数组长度
        if(files.length <= 0){
            list.add("请选择文件");
            return list;
        }
        for(MultipartFile file : files){
            // 源文件名
            String originalFilename = file.getOriginalFilename();
            // 文件格式
            String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
            // 新文件名,避免文件名重复,造成文件替换问题
            String fileName = UUID.randomUUID()+"."+suffix;
            // 文件存储路径
            String filePath = "D:/uploadFile/";
            // 文件全路径
            File targetFile = new File(filePath+fileName);

            // 判断文件存储目录是否存在,不存在则新建目录
            if(!targetFile.getParentFile().exists()){
                targetFile.getParentFile().mkdir();
            }
            try {
                // 将图片保存
                file.transferTo(targetFile);
                list.add(originalFilename);
            } catch (IOException e) {
                log.info("文件上传异常={}",e);
            }
        }
        return list;
    }
}

静态资源问题

SpringBoot静态资源默认路径为:classpath:/META-INF/resources/classpath:/resources/classpath:/static/classpath:/public/。也就是说如果想访问静态资源,则需要将静态资源 文件放在这四个路径下面。

注:classpath 指的是 SpringBoot项目resources

如果想自定义静态资源路径有两种方式,

application.yml中指定

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring:
  resources:
    static-locations: classpath:/templates/

代码实现WebMvcConfigurer

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Configuration
public class FileConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations("classpath:/templates/");
    }

注:当配置了自定义静态资源路径后,其默认配置将失效

文件上传前端实现

在静态资源路径下,新建file.html文件,浏览器访问ip:port/file.html,进入file页面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<form enctype="multipart/form-data" method="post" action="/uploadFile">
    文件:<input type="file" name="files"/>
    <input type="submit" value="上传"/>
</form>

这里需要注意的是文件上传表单的enctype为multipart/form-data

下一篇: SpringBoot读取配置文件的几种方式→

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-11-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
springboot文件上传及虚拟路径设置
今日主题:springboot文件上传及虚拟路径设置 简介 相信大家在做项目中会遇到一些情况,比如文件上传,但是大家会发现他上次的目录是target目录下,也就是说,只要target目录没了,文件也就没了,这个是我们不想看到的,然后有些人就是直接将文件存到磁盘就好了啊,这个思路是没错的,但是我们在前端却不能直接引用磁盘里的真实路径的文件,因为这个存在安全问题,所以这个时候,我们就要用web服务器来帮我们做一个虚拟映射,我们访问一个虚拟路径,其实访问的就是本机的真实路径,这样保证了安全性。 环境 spri
java后端指南
2021/05/13
2K0
springboot文件上传及虚拟路径设置
SpringBoot系列(八)文件上传的正确姿势
 我们直接创建一个包含web依赖的项目就好了。然后需要在配置文件配置文件上传的一些设置。这里使用yml文件作为配置文件,如果不懂语法的,请移步前面的系列三,里面有详细解释。
全栈学习笔记
2022/03/31
1.2K0
SpringBoot系列(八)文件上传的正确姿势
SpringBoot实现文件上传功能详解
自动配置是SpringBoot为我们提供的便利之一,开发者可以在不作任何配置的情况下,使用SpringBoot提供的默认设置,如处理文件需要的MultipartResolver。
huofo
2022/03/18
2.7K0
SpringBoot实现文件上传功能详解
SpringBoot上传下载
CBeann
2023/12/25
1820
Springboot静态资源映射及文件映射
在开发一个基于Springboot的项目时,遇到了一个问题,那就是如何让前端访问到存储在后端项目中的图片,我首先想到的是Springboot的静态资源映射(后来发现不能用静态资源映射去解决我的需求)。
每周聚焦
2025/02/07
2200
Springboot静态资源映射及文件映射
SpringBoot解决文件上传,返回可访问路径
问题描述:SpringBoot项目中需要上传文件到当前服务器的磁盘(即物理地址),返回可访问的路径给前端。前端利用路径显示文件内容。 开发环境:SpringBoot2.0以上、JDK 1.8
全栈程序员站长
2022/08/15
1.8K0
从SpringBoot源码看资源映射原理
很多的小伙伴刚刚接触SpringBoot的时候,可能会遇到加载不到静态资源的情况。
HUC思梦
2022/05/11
5110
SpringBoot 简单文件上传实现以及jar包方式运行项目
1. 简单文件上传实现 ---- 1. 部分项目目录结构 1. 配置文件上传路径 2. 添加文件上传配置(此处为SdSpringBootApplication) // 需要将其配置到有@Configuration注解的类中 @Bean public MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); // 单个文件最大 fact
山海散人
2021/03/03
6470
SpringBoot静态资源访问控制和封装集成方案
最近在着手公司框架优化及项目实际应用,原先方案是springboot+html前后端分离单独部署,后端人员兼职前端开发,后续产品线业务进行优化,面向企业使用部分由移动网站人员负责设计开发,内部配置后台管理还是由后端负责,随着框架不停迭代与使用的项目越来越多,项目升级框架变得十分麻烦,后端部分可以通过maven私服进行版本迭代,后台管理页面升级则需要进行各个项目拷贝,所以决定对框架进行整合,将后台管理页面与框架后端代码进行整合发布。
code2roc
2023/07/19
1810
SpringBoot静态资源访问控制和封装集成方案
4_Springboot(四) 常用插件
张哥编程
2024/12/13
1140
4_Springboot(四) 常用插件
SpringBoot2----拦截器和文件上传功能
Thymeleaf 模板布局 th:fragment、th:replace、th:insert、th:remove
大忽悠爱学习
2021/11/15
1.2K0
SpringBoot实现MultipartFile文件上传
1、SpringBoot采用FileUpload组件实现上传处理,在控制器中可以使用MultipartFile类进行接收。
别先生
2020/11/24
9.2K0
SpringBoot实现MultipartFile文件上传
在springboot中编写一个上传接口
Spring Boot 有内置的文件上传限制,默认情况下,这些限制可能会影响到上传文件的大小,即使你已经在自定义属性中设置了 max-size。所以我们要在 application.yml 中添加max-file-size以及 max-request-size配置来确保 Spring 的文件上传限制与自定义的 max-size 一致
用户11325910
2024/10/31
1680
在springboot中编写一个上传接口
springboot 打成jar包 上传图片并保存
springboot打成jar包后获取项目路径为 file:/D:/Document/Document.jar!/BOOT-INF/classes!/static 所以如果打jar包需要处理路径问题
用户5899361
2020/12/07
1.2K0
SpringBoot入门建站全系列(九)文件上传功能与下载方式
Spring对文件上传做了简单的封装,就是用MultipartFile这个对象去接收文件,当然有很多种写法,下面会一一介绍。
品茗IT
2019/08/12
1.2K0
SpringBoot 整合文件上传 elment Ui 上传组件
用户7630333
2023/12/07
4020
SpringBoot 整合文件上传 elment Ui 上传组件
大文件上传切片上传 vue java
使用vue+elementui进行前端开发, 实现在dialog中 带进度条的上传大文件页面
solate
2020/06/18
6.8K1
SpringBoot 实现基于Restful风格的文件上传与下载
文件上传与下载在Web应用中是一个比较常见的功能。在本教程中,我将基于Spring 2.2.6版本实现一个基于Restful风格的文件上传与下载APIs。
会呼吸的Coder
2021/09/02
5K0
总结SpringBoot1.x迁移到2.x需要注意的问题
SpringBoot1.x和SpringBoot2.x版本差异化还是比较大的,有些三方依赖组件有些是基于2.0版本为标准升级的,当我们将项目由1.0升级到2.0时会出现依赖的方法不存在或方法错误,需要逐个去调整,下面总结了我们升级实践过程中遇到的一些问题和网友总结的一些问题。
欢醉
2023/02/27
4080
SpringBoot + Vue 前后端分离项目实现文件上传至本地以及文件下载功能
最近在开发一个 微信微信小程序的后台管理系统,在这个系统中遇到了一个需求,就是用户需要上传一个 Excel 文件到服务器端,服务器端对文件解析,然后将解析得到的数据存入数据库当中。
Gorit
2021/12/08
11.4K0
SpringBoot + Vue 前后端分离项目实现文件上传至本地以及文件下载功能
相关推荐
springboot文件上传及虚拟路径设置
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验