Spring Boot默认上传的单个文件大小1MB
,一次上传的总文件大小为10MB
。
单个文件上传应用MultipartFile参数来接管文件,多文件应用MultipartFile[]数组来接管,而后遍历它,当成单文件来解决。
问题一:如何配置上传文件大小限度?
@Configurationpublic 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提供了一种形式,将文件上传到服务器物理门路下,而后做个映射关系,让图片能够失常被拜访,具体操作如下:
@Configurationpublic 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@Slf4jpublic 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
@Configurationpublic 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准时推送技术文章,让你的下班路不在孤单,而且每月还有送书流动,助你晋升硬实力!