spring-boot-route(三)实现多文件上传

简介: Spring Boot默认上传的单个文件大小`1MB`,一次上传的总文件大小为`10MB`。单个文件上传使用MultipartFile参数来接收文件,多文件使用MultipartFile[]数组来接收,然后遍历它,当成单文件来处理。

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

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

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

@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提供了一种方式,将文件上传到服务器物理路径下,然后做个映射关系,让图片可以正常被访问,具体操作如下:

@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:"为固定写法。

文件上传后台实现

@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中指定

spring:
  resources:
    static-locations: classpath:/templates/

代码实现WebMvcConfigurer

@Configuration
public class FileConfig implements WebMvcConfigurer {
   

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

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

文件上传前端实现

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

<form enctype="multipart/form-data" method="post" action="/uploadFile">
    文件:<input type="file" name="files"/>
    <input type="submit" value="上传"/>
</form>

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

更多优质内容推荐访问 毕设侠

目录
相关文章
|
10月前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
424 2
|
缓存 运维 Java
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
129 0
|
前端开发 Java Spring
Spring之文件上传下载,jrebel,多文件上传
Spring之文件上传下载,jrebel,多文件上传
77 0
|
存储 Java Nacos
Spring Cloud Alibaba基础教程:Nacos配置的多文件加载与共享配置
Spring Cloud Alibaba基础教程:Nacos配置的多文件加载与共享配置
929 0
Spring Cloud Alibaba基础教程:Nacos配置的多文件加载与共享配置
|
存储 Java 数据库
|
Java Nacos Spring
Spring Cloud Alibaba基础教程:Nacos配置的多文件加载与共享配置
前情回顾: 《Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现》 《Spring Cloud Alibaba基础教程:支持的几种服务消费方式》 《Spring Cloud Alibaba基础教程:使用Nacos作为配置中心》 《Spring Cloud Alib...
3590 0
|
前端开发 Java Spring
spring mvc java 把多文件打包成zip,并下载
再来一篇 /** * 压缩并导出文件 * @param zipPath 压缩文件临时路径 路径最后不要有 / * @param zipName 压缩为文件名 **.zip * @param createFilesPath 需要压缩的文件列表 * @param request * @param response * @return * @throws
2983 0
|
2月前
|
Java Spring 容器
SpringBoot自动配置的原理是什么?
Spring Boot自动配置核心在于@EnableAutoConfiguration注解,它通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类。这些类根据@Conditional系列注解判断是否生效。但Spring Boot 3.0后已弃用spring.factories,改用新格式的.imports文件进行配置。
662 0
|
6月前
|
前端开发 Java 数据库
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——Thymeleaf 介绍
本课介绍Spring Boot集成Thymeleaf模板引擎。Thymeleaf是一款现代服务器端Java模板引擎,支持Web和独立环境,可实现自然模板开发,便于团队协作。与传统JSP不同,Thymeleaf模板可以直接在浏览器中打开,方便前端人员查看静态原型。通过在HTML标签中添加扩展属性(如`th:text`),Thymeleaf能够在服务运行时动态替换内容,展示数据库中的数据,同时兼容静态页面展示,为开发带来灵活性和便利性。
263 0
|
2月前
|
缓存 JSON 前端开发
第07课:Spring Boot集成Thymeleaf模板引擎
第07课:Spring Boot集成Thymeleaf模板引擎
318 0
第07课:Spring Boot集成Thymeleaf模板引擎