SpringBoot关于文件上传配置的几种方式

在进行SpringBoot项目文件临时目录位置及其最大文件传输大小等相关配置的时候,总结几种可以进行配置的方式

1、@MultipartConfig 注解

在 javax.servlet.annotation 包里有一个MultipartConfig 注解来进行文件上传的相关配置

源码:

package javax.servlet.annotation;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MultipartConfig {/*** 临时文件上传目录*/String location() default "";/*** 上传文件最大值 */long maxFileSize() default -1L;/*** @return the maximum size of the request allowed for {@code*         multipart/form-data}*/long maxRequestSize() default -1L;/*** @return the size threshold at which the file will be written to the disk*/int fileSizeThreshold() default 0;
}

使用:直接在相关的Controller 上进行使用,可以写一个全局的Controller上进行使用,也可以自己写一个额外的全局Controller注解来进行使用,方法肯定

@RestController
@RequestMapping("test")
// MultipartConfig 注解的使用
@MultipartConfig(maxFileSize = 1024*1024*1024, maxRequestSize = 1024*1024*1024)
public class PackagesController
{@RequestMapping(method = RequestMethod.POST)public String create(@RequestParam("package") MultipartFile uploadedPackage){return "create";}
}

2、配置文件

直接在Spring的相关yaml配置文件中进行相关属性值的指定

其他无需进行相关的配置

3、利用SpringBoot的自动配置原理

写一个文件上传属性设置相关的配置类 MultipartConfig ,以**@Configuration**进行指定,然后来进行相应属性的配置

@Configuration
public class MultipartConfig {/*** 文件上传临时路径*/@BeanMultipartConfigElement multipartConfigElement() {MultipartConfigFactory factory = new MultipartConfigFactory();String location = System.getProperty("user.home") + "/my/temp";File tmpFile = new File(location);if (!tmpFile.exists()) {if (!tmpFile.mkdirs()) {System.out.println("create was not successful.");}}factory.setLocation(location);return factory.createMultipartConfig();}
}

原理

这里可能有几个问题:

  • 如果我不指定文件上传的临时目录,那临时目录应该上传到哪里去了,也就是默认的临时目录是啥?
  • 这种@Configuration 让这个配置是如何生效的?

问题1:如果我不指定文件上传的临时目录,那临时目录应该上传到哪里去了,也就是默认的临时目录是啥?

private void parseParts(boolean explicit) {// Return immediately if the parts have already been parsedif (parts != null || partsParseException != null) {return;}Context context = getContext();MultipartConfigElement mce = getWrapper().getMultipartConfigElement();....省略boolean success = false;try {File location;String locationStr = mce.getLocation();// 如果不指定,locationStr是字符串if (locationStr == null || locationStr.length() == 0) {// 获取到ServletContext.TEMPDIR这个attribute的值,这个ServletContext.TEMPDIR 为 javax.servlet.context.tempdir// 这个属性的值可以在配置文件中指定,默认的是 tmp/tomcat.xxxxxx.端口号/work/Tomcat/localhost/ROOTlocation = ((File) context.getServletContext().getAttribute(ServletContext.TEMPDIR));} else {// If relative, it is relative to TEMPDIRlocation = new File(locationStr);if (!location.isAbsolute()) {location = new File((File) context.getServletContext().getAttribute(ServletContext.TEMPDIR),locationStr).getAbsoluteFile();}}... 省略代码} finally {if (partsParseException != null || !success) {parameters.setParseFailedReason(FailReason.UNKNOWN);}}
}

问题二:这种@Configuration 让这个配置是如何生效的?

启动Tomcat的时候会启动 StandardWrapper 进行初始化,然后会进行是否指定 multipartConfigElement bean的判断,从而来进行相应的初始化

public synchronized Servlet loadServlet() throws ServletException {// 如果指定了就按指定的进行初始化if (multipartConfigElement == null) {MultipartConfig annotation =servlet.getClass().getAnnotation(MultipartConfig.class);if (annotation != null) {multipartConfigElement =new MultipartConfigElement(annotation);}}
}

SpringBoot关于文件上传配置的几种方式相关推荐

  1. SpringBoot图文教程4—SpringBoot 实现文件上传下载(亲测)

    SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+案例 思维导图」「基础篇上」 SpringBoot图文教程2-日志的使用「logback」「log4j」 Spring ...

  2. springboot改文件头_SpringBoot图文教程4—SpringBoot 实现文件上传下载

    有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 文章结尾配套自测面试题,学完技术自我测试更扎实 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例 ...

  3. 【SpringBoot学习】5、SpringBoot 实现文件上传,图片上传并显示功能

    SpringBoot 实现文件上传,图片上传并显示功能 我先看一下<颈椎病康复指南>再给大家说怎么实现的这两个功能,毕竟只是一个新手,解决这种复杂点的问题(相对而言),还是需要花费大量时间 ...

  4. SpringBoot实现文件上传接口

    作者平台: | CSDN:blog.csdn.net/qq_41153943 | 掘金:juejin.cn/user/651387- | 知乎:www.zhihu.com/people/1024- | ...

  5. 微信小程序+SpringBoot实现文件上传与下载

    微信小程序+SpringBoot实现文件上传与下载 1.文件上传 1.1 后端部分 1.1.1 引入Apache Commons FIleUpload组件依赖 1.1.2 设置上传文件大小限制 1.1 ...

  6. 文件上传-01基础及过滤方式

    文件上传之基础及过滤方式 1.简介 什么是文件上传漏洞 指程序对文件的上传未作全面的限制,导致用户可以上传一些超越用户权限的一些文件,可以是木马,shell脚本,病毒等. 文件上传漏洞有哪些危害 可以 ...

  7. IOS开发基础之单文件上传基础最原始的方式

    IOS开发基础之单文件上传基础最原始的方式 info.plist 加入一行代码 <key>NSAppTransportSecurity</key><dict>< ...

  8. Java实现文件上传到服务器(FTP方式)

    Java实现文件上传到服务器(FTP方式) 1,jar包:commons-net-3.3.jar 2,实现代码: //FTP传输到数据库服务器private boolean uploadServerB ...

  9. 2020小迪培训(第20天WEB 漏洞-文件上传之基础及过滤方式)

    WEB 漏洞-文件上传之基础及过滤方式 前言 知识点 什么是文件上传漏洞? 有文件上传不一定存在漏洞 凡是存在文件上传的地方/功能的地方都可以进行文件上传漏洞测试 上传文件操作的代码的完整性.安全性, ...

  10. SpringBoot下文件上传与下载的实现

    原文:http://blog.csdn.net/colton_null/article/details/76696674 SpringBoot后台如何实现文件上传下载? 最近做的一个项目涉及到文件上传 ...

最新文章

  1. Matlab中bwlabel函数的使用
  2. 一篇博客带你轻松应对Springboot面试
  3. SpringBoot+Vue视频干货
  4. Nginx开启Gzip压缩大幅提高页面加载速度
  5. JVM调优:heap dump信息分析
  6. win7 php redis 扩展,Windows中安装Redis及php redis扩展
  7. [html] html6即将到来,你最期待的是什么特性呢?
  8. 火山安卓文件名类操作
  9. Python怎么安装PHP,php中ThinkPHP的下载和安装
  10. 华硕主板如何用u盘启动计算机,华硕主板怎么设置u盘启动
  11. 移动安全-移动App漏洞检测平台
  12. SLAM Evaluation 之轨迹对齐论文翻译Closed-Form Solution of Absolute Orientation Using Orthonormal Matrices
  13. windows开启网络共享
  14. C语言编译器开发之旅(二):解析器
  15. Android 9 Pie
  16. 【全教程】qt连接mysql——从qt编译mysql驱动到qt连接mysql数据库(一、编译连接前准备)
  17. 分享 | CADD之分子动力学的简介(上篇)
  18. 阿里巴巴数字化运营能力
  19. 【PHP-网页内容抓取】抓取网页内容的两种常用方法
  20. Java Integer值范围问题

热门文章

  1. 慢就是快的人生哲理_快与慢,人生的哲学思考
  2. 自动化测试遇到的难点_谈谈我在自动化测试中遇到的坑
  3. 软著申请--学生以学校名义申请软著
  4. 云原生与业务可观测性
  5. 用VS实现图片的读取、显示与存储
  6. TR CEV65M-01460一个人,也有春夏秋冬
  7. PiscisOS开发笔记_1_PiscisOS的诞生和系统特性简介
  8. 名编辑电子杂志大师教程 | 仿古书翻页
  9. 数据库查询 - 选课系统
  10. 华为 eNSP 打开警告:请将eNSP相关应用程序添加到windows firewall的允许程序列表,并允许其在公用网络上运行!