SpringBoot关于文件上传配置的几种方式
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关于文件上传配置的几种方式相关推荐
- SpringBoot图文教程4—SpringBoot 实现文件上传下载(亲测)
SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+案例 思维导图」「基础篇上」 SpringBoot图文教程2-日志的使用「logback」「log4j」 Spring ...
- springboot改文件头_SpringBoot图文教程4—SpringBoot 实现文件上传下载
有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 文章结尾配套自测面试题,学完技术自我测试更扎实 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例 ...
- 【SpringBoot学习】5、SpringBoot 实现文件上传,图片上传并显示功能
SpringBoot 实现文件上传,图片上传并显示功能 我先看一下<颈椎病康复指南>再给大家说怎么实现的这两个功能,毕竟只是一个新手,解决这种复杂点的问题(相对而言),还是需要花费大量时间 ...
- SpringBoot实现文件上传接口
作者平台: | CSDN:blog.csdn.net/qq_41153943 | 掘金:juejin.cn/user/651387- | 知乎:www.zhihu.com/people/1024- | ...
- 微信小程序+SpringBoot实现文件上传与下载
微信小程序+SpringBoot实现文件上传与下载 1.文件上传 1.1 后端部分 1.1.1 引入Apache Commons FIleUpload组件依赖 1.1.2 设置上传文件大小限制 1.1 ...
- 文件上传-01基础及过滤方式
文件上传之基础及过滤方式 1.简介 什么是文件上传漏洞 指程序对文件的上传未作全面的限制,导致用户可以上传一些超越用户权限的一些文件,可以是木马,shell脚本,病毒等. 文件上传漏洞有哪些危害 可以 ...
- IOS开发基础之单文件上传基础最原始的方式
IOS开发基础之单文件上传基础最原始的方式 info.plist 加入一行代码 <key>NSAppTransportSecurity</key><dict>< ...
- Java实现文件上传到服务器(FTP方式)
Java实现文件上传到服务器(FTP方式) 1,jar包:commons-net-3.3.jar 2,实现代码: //FTP传输到数据库服务器private boolean uploadServerB ...
- 2020小迪培训(第20天WEB 漏洞-文件上传之基础及过滤方式)
WEB 漏洞-文件上传之基础及过滤方式 前言 知识点 什么是文件上传漏洞? 有文件上传不一定存在漏洞 凡是存在文件上传的地方/功能的地方都可以进行文件上传漏洞测试 上传文件操作的代码的完整性.安全性, ...
- SpringBoot下文件上传与下载的实现
原文:http://blog.csdn.net/colton_null/article/details/76696674 SpringBoot后台如何实现文件上传下载? 最近做的一个项目涉及到文件上传 ...
最新文章
- Matlab中bwlabel函数的使用
- 一篇博客带你轻松应对Springboot面试
- SpringBoot+Vue视频干货
- Nginx开启Gzip压缩大幅提高页面加载速度
- JVM调优:heap dump信息分析
- win7 php redis 扩展,Windows中安装Redis及php redis扩展
- [html] html6即将到来,你最期待的是什么特性呢?
- 火山安卓文件名类操作
- Python怎么安装PHP,php中ThinkPHP的下载和安装
- 华硕主板如何用u盘启动计算机,华硕主板怎么设置u盘启动
- 移动安全-移动App漏洞检测平台
- SLAM Evaluation 之轨迹对齐论文翻译Closed-Form Solution of Absolute Orientation Using Orthonormal Matrices
- windows开启网络共享
- C语言编译器开发之旅(二):解析器
- Android 9 Pie
- 【全教程】qt连接mysql——从qt编译mysql驱动到qt连接mysql数据库(一、编译连接前准备)
- 分享 | CADD之分子动力学的简介(上篇)
- 阿里巴巴数字化运营能力
- 【PHP-网页内容抓取】抓取网页内容的两种常用方法
- Java Integer值范围问题