栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java > SpringBoot

spring-boot-route(三)实现多文件上传

SpringBoot 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spring-boot-route(三)实现多文件上传

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 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页面

文件:

这里需要注意的是文件上传表单的enctype为multipart/form-data

此是spring-boot-route系列的第三篇文章,这个系列的文章都比较简单,主要目的就是为了帮助初次接触Spring Boot 的同学有一个系统的认识。本文已收录至我的github,欢迎各位小伙伴star!

github:https://github.com/binzh303/spring-boot-route

点关注、不迷路

如果觉得文章不错,欢迎关注点赞收藏,你们的支持是我创作的动力,感谢大家。

如果文章写的有问题,请不要吝啬,欢迎留言指出,我会及时核查修改。

如果你还想更加深入的了解我,可以微信搜索「Java旅途」进行关注。回复「1024」即可获得学习视频及精美电子书。每天7:30准时推送技术文章,让你的上班路不在孤独,而且每月还有送书活动,助你提升硬实力!

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号