一:请求的设置
一般请求中请求的参数都是以K=V的形式来进行传递,但传递二进制数据(文件,图片)时就会显得力不从心,所以二进制数据已multipart格式请求传递。
multipart格式请求与一般请求的不同之处:
- content-type请求头参数
- 实体内容为二进制数据。
请求要求:
- 请求类型只能为post
- enctype设置为 multipart/form-data,将用户所选文件的二进制数据发送给服务器
springMVC会将multipart格式的请求映射为MultipartFile对象,并对MultipartFile对象MultipartResolver进行解析和保存。
二:MultipartFile对象
2.1 MultipartFile对象的限制
可以对Multipart格式请求设置上传条件:
- maxFileSize:默认值为-1,表示不受限制。
- maxRequestSize:表示允许多部分http请求的最大容量。它的默认值为-1,表示它是不受限制的。
- location:将上传的文件保存到磁盘中的指定位置,调用Part 中的write 方法将用到它。
- fileSizeThreshold:设定一个溢出尺寸,超过这个值之后,上传的文件将被写入磁盘。在一个由多部分组成的请求中,每一个表单域,包括非文本域,都会被转换成一个Part。
2.2 MultipartFile对象的处理
对MultipartFile对象的解析处理:
- byte[ ] getBytes( ):获取文件数据
- String getContentType( ):获取文件MIME类型,如application/pdf、image/pdf等
- InputStream getInputStream( ):获取文件流
- String getOriginalFileName( ):获取上传文件的原名称
- long getSize( ):获取文件的字节大小,单位为byte
- boolean isEmpty( ):是否有上传的文件
- void transferTo(File dest):将上传的文件保存到一个目标文件中。
- getName() :获取文件名
三:Demo
#是否开启文上传服务
spring.servlet.multipart.enabled=
#文件阀值
spring.servlet.multipart.file-size-threshold=
#文件存储位置,调用Part 中的write 方法将用到它
spring.servlet.multipart.location=
#文件大小
spring.servlet.multipart.max-file-size=
#总文件大小
spring.servlet.multipart.max-request-size=
#懒解析
spring.servlet.multipart.resolve-lazily=
@PostMapping("file")
public String uploadFile(MultipartFile file) throws Exception{
//文件数据
byte[] bytes = file.getBytes();
System.out.println("文件数据:"+bytes);
//文件mime类型
String contentType = file.getContentType();
System.out.println("文件mime类型:"+contentType);
//文件流
InputStream inputStream = file.getInputStream();
System.out.println("文件流:"+inputStream);
//文件名
String name = file.getName();
System.out.println("文件名:"+name);
//上传文件原名称
String originalFilename = file.getOriginalFilename();
System.out.println("上传文件原名称:"+originalFilename);
//是否为空
boolean empty = file.isEmpty();
System.out.println("是否为空:"+empty);
//获取资源对象
Resource resource = file.getResource();
System.out.println("获取资源对象"+resource);
//文件大小
long size = file.getSize();
System.out.println("文件大小"+size);
//将上传的文件保存到一个目标文件中。
//File file1 = new File("sads");
//file.transferTo(file1);
return "图片上传成功";
}