共计 2890 个字符,预计需要花费 8 分钟才能阅读完成。
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。
此是 spring-boot-route 系列的第三篇文章,这个系列的文章都比较简单,次要目标就是为了帮忙首次接触 Spring Boot 的同学有一个零碎的意识。本文已收录至我的 github,欢送各位小伙伴star
!
github:https://github.com/binzh303/s…
点关注、不迷路
如果感觉文章不错,欢送 关注 、 点赞 、 珍藏,你们的反对是我创作的能源,感激大家。
如果文章写的有问题,请不要悭吝,欢送留言指出,我会及时核查批改。
如果你还想更加深刻的理解我,能够微信搜寻「Java 旅途」进行关注。回复「1024」即可取得学习视频及精美电子书。每天 7:30 准时推送技术文章,让你的下班路不在孤单,而且每月还有送书流动,助你晋升硬实力!