本文主要介绍下springboot上传文件的几种情况的代码实现和可能存在的问题(废话不多说,主要以代码为导向同时结合存在的问题,中间会简单掺杂一些上传文件时http协议的报文结构、内容分析说明),主要分以下几种情况(注意一定要从上往下按顺序看,一些关键细节在上面篇章如果介绍过,后面就不再赘述,比如:报错了如何解决、http报文结构的简单说明,如果需要了解各种http请求报文结构可以查看https://blog.csdn.net/mayunju/article/details/113867033):
01、只上传且上传一个文件
01-01、使用MultipartFile直接接收文件参数
01-02、使用一个变量接收参数(变量中使用MultipartFile的实现类CommonsMultipartFile来接收文件参数)
02、只上传且上传多个文件
02-01、使用MultipartFile[]直接接收文件参数
02-02、使用一个变量接收参数(变量中使用MultipartFile的实现类CommonsMultipartFile[]来接收文件参数)
03、上传文件的同时还提交其他文本信息(适用于上传文件的同时还提交其它表单信息等类似场景)
03-01、上传单个文件同时还提交其他文本信息
03-02、上传多个文件同时还提交其他文本信息
用到的工具:idea、postman、Fiddler(Windows平台抓包工具)
一、首先创建一个空的springboot项目,创建成功后结构如下:
pom.xml的核心内容如下(不贴任何多余的内容,下面其他部分亦如此):
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.3.RELEASE</version>
</parent>
<groupId>com.example</groupId>
<artifactId>springboot-upload-file</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-upload-file</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
application.yml的内容如下:
server:
port: 8080
servlet:
context-path: /springboot-upload-file
二、接下来是核心部分
首先创建一个Controller,后面的示例都写在这一个Controller中:
package com.example.springbootuploadfile.uploadfile;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/")
public class UploadFileDemoController {
}
01、只上传且上传一个文件
01-01、使用MultipartFile直接接收参数(org.springframework.web.multipart.MultipartFile)
后台代码部分(主要是接收参数这块儿,@RequestParam("newFile")这里要注意,和前端传参要保持一致,也可以不加该注解,默认和参数名uploadFile一致,后面不再赘述)
/**
* 单文件上传(只上传文件,不提交其他文本信息)
*/
@PostMapping("/uploadSingleFile")
public String uploadSingleFile(@RequestParam("newFile") MultipartFile uploadFile) {
// 文件上传的路径
String uploadBasePath = "D:\\uploadFile";
File file = new File(uploadBasePath);
if (!file.isDirectory()) {