大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说springboot上传文件大小限制_bootstrap文件上传,希望您对编程的造诣更进一步.
本文介绍Spring Boot上传文件的两种形式,一种是解析方式是StandardServletMultipartResolver,它是基于Servlet3.0的,所以不需要依赖其他jar包,另一个组件是CommonsMultipartResolver,使用它需要额外引用其它jar包,如想了解,请继续往下看:
- 公共引用方法:
private final static String PATH = "/data/files/";
private File buildDirectory() {
File directory = new File(PATH);
if (!directory.exists() || !directory.isDirectory()) {
directory.mkdirs();
}
return directory;
}
private void upload(MultipartFile multipartFile, File directory) {
File file = new File(PATH + multipartFile.getOriginalFilename());
String filename = multipartFile.getOriginalFilename();
//实际项目中可能会上传重名文件,但内容可能不一致,所以我们需要重置文件名称,否则原文件将丢失
if (file.exists()) {
filename = System.currentTimeMillis() + filename;
}
try {
multipartFile.transferTo(new File(directory, filename));
} catch (IOException e) {
log.error("上次文件失败", e);
throw new RuntimeException("上次文件失败");
}
}
- StandardServletMultipartResolver: 配置文件:
spring:
servlet:
multipart:
enabled: true
location: /data/
max-file-size: 1MB
max-request-size: 5MB
resolve-lazily: false
file-size-threshold: 0
enabled:开启上传文件配置;
location:文件上传临时保存位置,没有写入最终保存位置时存放的位置;
max-file-size:上传单个文件最大大小;
max-request-size:上传一组文件最大大小;
resolve-lazily:是否延迟解析,相当于懒加载;
file-size-threshold:文件大小阈值,当大于这个阈值时将写入到磁盘,否则存在内存中,默认为0
上传文件Java实现:
@PostMapping("/standardServletMultipartResolver")
public String standardServletMultipartResolver(@RequestParam(name = "file") MultipartFile[] multipartFiles) {
Assert.isTrue(multipartFiles != null && multipartFiles.length > 0, "请选择文件");
//获取保存文件磁盘的文件夹,如果不存在则创建
File directory = buildDirectory();
for (int i = 0; i < multipartFiles.length; i++) {
upload(multipartFiles[i], directory);
}
return "上传成功!";
}
测试:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/demo/file/standardServletMultipartResolver" method="post" enctype="multipart/form-data" target="frameName">
<!-- multiple属性表示可上次多个文件 -->
<input type="file" name="files" value="选择文件" multiple>
<input type="submit" value="上传">
</form>
<!-- 提交成功后停留在原页面 -->
<iframe src="" frameborder="0" name="frameName"></iframe>
</body>
</html>
- CommonsMultipartResolver: 配置文件:
spring:
servlet:
multipart:
enabled: false
location: /data/
max-file-size: 1MB
max-request-size: 5MB
resolve-lazily: false
file-size-threshold: 0
依赖:
<commons.fileupload>1.3.3</commons.fileupload>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons.fileupload}</version>
</dependency>
Java实现:
@PostMapping("/commonsMultipartResolver")
public String commonsMultipartResolver(HttpServletRequest request) {
List<MultipartFile> multipartFiles = getFormMultipartFile(request);
Assert.isTrue(multipartFiles != null && multipartFiles.size() > 0, "请选择需要上传的文件");
File directory = buildDirectory();
multipartFiles.stream().forEach(multipartFile -> {
upload(multipartFile, directory);
});
return "上传成功";
}
private List<MultipartFile> getFormMultipartFile(HttpServletRequest request) {
//将当前上下文初始化给CommonsMutipartResolver多部分解析器)
MultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());
MultipartHttpServletRequest multipartRequest = resolver.resolveMultipart(request);
//检查form中是否有enctype="multipart/form-data"
if (resolver.isMultipart(request)) {
//键名是form表单中上传文件控件的name值
return multipartRequest.getFiles("files");
}
return null;
}
测试代码就不再重复了,和上面的html代码一致,将提交路径更改一下就行了。
- 总结:需要注意的点是使用CommonsMultipartResolver解析器的时候,我们需要关闭Spring Boot上传文件配置,当然也可以通过其他途径去关闭Spring Boot的StandardServletMultipartResolver组件,比如在项目的启动器中去排除等。个人建议使用StandardServletMultipartResolver,简单、方便,无需添加其它依赖,你们觉得呢?
如有不到之处,欢迎各位留言指正,不慎感激。 更多文章: 点击跳转CSDN博客 点击跳转简书博客 公众号:代码小搬运
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13436.html