【Spring MVC】后端处理多文件上传如何保持最大的灵活性

前言

有一个多文件上传的需求,翻看了Spring MVC的官网,总结一下:

  • 如何根据版本号找官方文档
  • 后端如何声明Controller能保持较好的灵活性

找文档

  1. spring-framework 官方文档中心
  2. 选择需要的版本
  3. 点击 “spring-framework-reference”

在这里插入图片描述
4. 具体内容按板块点进去
在这里插入图片描述

Spring MVC 如何接收多文件

5.2.15 版本 官方介绍了几种写法, 值得注意的是以下的信息:

Declaring the argument type as a List allows for resolving multiple files for the same parameter name.

  • 言下之意是以下Controller 可以接收多个文件
    @PostMapping("/form")
    public String handleFormUpload(@RequestParam("files") List<MultipartFile> files) {

    }

在这里插入图片描述


When the @RequestParam annotation is declared as a Map<String, MultipartFile> or MultiValueMap<String, MultipartFile>, without a parameter name specified in the annotation, then the map is populated with the multipart files for each given parameter name.

  • 言下之意是 @RequestParam("files") 改成 @RequestParam(这里一定要改,不然会报错),可以使用以下参数来接收上传的文件
    • Map<String, MultipartFile>

      • 对应的调用为:
        在这里插入图片描述
        在这里插入图片描述
    • MultiValueMap<String, MultipartFile> (这种方式一个key可以传多个文件)

      • 对应的调用方式为:
        在这里插入图片描述
        在这里插入图片描述

formdata 接收其他传参

类似 orderId 这种业务key也可以通过 formdata 传参
在这里插入图片描述

在这里插入图片描述

结论

后端处理多文件上传,如果有可拓展性的要求,可以使用如下的方法声明 Controller。对应的key可以发展为策略模式的key

    @PostMapping("upload4MultiKeyAndValue")
    @ResponseBody
    public String upload4MultiKeyAndValue(@RequestParam MultiValueMap<String, MultipartFile> files, @RequestParam("orderId") String orderId) throws IOException {
        for (Map.Entry<String, List<MultipartFile>> entry : files.entrySet()) {
            List<MultipartFile> fileList = entry.getValue();
            for (MultipartFile multipartFile : fileList) {
                log.info("key : {} filename : {}", entry.getKey(), multipartFile.getOriginalFilename());
                // TODO 可以根据 key 实现策略模式, 每个key还可以对应多个文件
            }
        }
        return "success";
    }
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的Spring Boot后端接收处理上传文件的例子: 1. 首先,在pom.xml文件中添加以下依赖: ```xml <!--Spring Boot Web Starter--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--Spring Boot Starter for Apache Tomcat--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> ``` 2. 在Spring Boot应用程序的主类中添加以下注释: ```java @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } //添加以下配置 @Bean public MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); factory.setMaxFileSize(DataSize.parse("50MB")); //设置单个文件最大上传大小 factory.setMaxRequestSize(DataSize.parse("100MB")); //设置总上传大小 return factory.createMultipartConfig(); } } ``` 3. 在控制器类中添加以下代码: ```java @RestController @RequestMapping("/file") public class FileController { @PostMapping("/upload") public ResponseEntity<?> uploadFile(@RequestParam("file") MultipartFile file) throws IOException { //获取上传的文件名和内容类型 String fileName = file.getOriginalFilename(); String contentType = file.getContentType(); //获取上传的文件内容 byte[] bytes = file.getBytes(); //保存文件到本地 Path path = Paths.get("uploads/" + fileName); Files.write(path, bytes); //返回上传成功的信息 return ResponseEntity.ok().body("File uploaded successfully!"); } } ``` 4. 运行Spring Boot应用程序并测试上传文件的接口。 以上是一个简单的Spring Boot后端接收处理上传文件的例子,您可以根据具体需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值