随笔

multipart格式的数据 会将 一个表单拆分为 多个部分,每个部分对应一个输入域。在一般的表单输入域中,它所对应的部分中会放置文本型数据,但是如果上传文件的话,它所对应的部分可以是二进制。

配置 multipart 解析器:
有两个:

  • CommonsMultipartResolver:使用 Jakarta Commons FileUpload 解析 multiparty。
  • StandardServletMultipartResolver:依赖于 Servlet 3.0 对 multipart 请求的支持。

配置 StandardServletMultipartResolver 解析器

  1. 在ApplicationContext 中声明为 bean:
@Bean
public MultipartResolver multipartResolver(){return new StandardServletMultipartResolver();
}
  1. 在 web.xml 或 Servlet 初始化类中,配置 multipart 的具体细节,如:文件大写,临时文件路径等。
  • 如果已经实现了 WebApplicationInitializer 接口,可以在Servlet registration 上调用 setMultipartConfig() 方法进行配置:
@Override
public void onStartup(ServletContext servletContext) throws ServletException {DispatcherServlet dispatcherServlet = new DispatcherServlet();ServletRegistration.Dynamic registration = servletContext.addServlet("appServlet", dispatcherServlet);registration.addMapping("/");registration.setMultipartConfig(new MultipartConfigElement("/tmp/uploads"));
}
  • 若 初始化 类 继承了AbstractAnnotationConfigDispatcherServletInitializerAbstractDispatcherServletInitializer 通过重写 customizeRegistration 方法 来配置 multipart 的具体细节
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {registration.setMultipartConfig(new MultipartConfigElement("/tmp/test/uploads"));
}

了解 MultipartConfigElement 类:

new MultipartConfigElement("/tmp/test/uploads",2097152,4194304,0)
  • 指定 临时存放目录 为/tmp/test/uploads
  • 上传文件的最大容量:2097152 = 2MB。
  • 整个 multipart 请求的最大容量 4194304 = 4MB。
  • 文件大写 达到一定容量,会写入 临时文件路径中,默认是 0,所有上传的文件都会写入磁盘中。

对应 在 web.xml 中的配置:

<servlet><servlet-name>appServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup><multipart-config><!-- 临时路劲 --><location>/tmp/test/uploads</location><!-- 上传文件的最大值 --><max-file-size>2097152</max-file-size><!--请求的最大容量--><max-request-size>4194304</max-request-size></multipart-config>
</servlet>

配置 CommonsMultipartResolver 解析器

声明为 bean

@Bean
public MultipartResolver multipartResolver(){return new CommonsMultipartResolver();
}

文件大小,临时路径等在 声明Bean 时设置。

 @Bean
public MultipartResolver multipartResolver() throws IOException {CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();// 设置 临时目录multipartResolver.setUploadTempDir(new FileSystemResource("/tmp/test/uploads"));// 最大文件multipartResolver.setMaxUploadSize(2097152);multipartResolver.setMaxInMemorySize(0);return multipartResolver;
}

上传文件、处理文件

表单的大体样式:

<form action="" method="post" enctype="multipart/form-data"><input type="file" name="picture" accept="image/jpeg"><input type="submit" value="提交">
</form>
  • enctype="multipart/form-data" 告诉 浏览器以 multipart 数据的形式提交表单。
  • accept="image/jpeg" 限制文件接收的类型 为 JPEG。

Controller 上接收上传的文件

@RequestMapping("/upload")
public String uploadImage(@RequestPart("picture")MultipartFile file) throws IOException {// 获取 文件 名String filename = file.getOriginalFilename();// 将 上传的文件 写入到 文件系统中file.transferTo(new File("/data/image"+filename));return "index";
}
  • MultipartFile 接口,为处理 multipart 数据提供了内容更为丰富的对象。
public interface MultipartFile extends InputStreamSource {String getName();@NullableString getOriginalFilename();@NullableString getContentType();boolean isEmpty();long getSize();byte[] getBytes() throws IOException;InputStream getInputStream() throws IOException;default Resource getResource() {return new MultipartFileResource(this);}void transferTo(File var1) throws IOException, IllegalStateException;default void transferTo(Path dest) throws IOException, IllegalStateException {FileCopyUtils.copy(this.getInputStream(), Files.newOutputStream(dest));}
}

可以把 MultipartFile 替换为 Servlet.http.Part

@RequestMapping("/upload")
public String uploadImage(@RequestPart("picture") Part file) throws IOException {// 获取 文件 名String filename = file.getSubmittedFileName();// 将 上传的文件 写入到 文件系统中file.write("/data/image"+filename);return "index";
}

通过 Part 参数接收上传文件,那么没有必要 配置 MultipartResolver 了。只有使用 MultipartFile 的时候,才需要 配置。

Spring之配置 multipartResolver 解析器、上传文件、处理文件相关推荐

  1. Spring Boot配置视图解析器

    2019独角兽企业重金招聘Python工程师标准>>> 在SpringBoot中,视图解析器的配置可以参考 Spring Boot数据源配置 #方式一:直接在属性文件中,加入 spr ...

  2. securecrt 连接配置存放目录_SecureCRT上传和下载文件(下载默认目录)

    SecureCR 下的文件传输协议有ASCII .Xmodem .Ymodem .Zmodem ASCII:这是最快的传输协议,但只能传送文本文件. Xmodem:这种古老的传输协议速度较慢,但由于使 ...

  3. spring多个视图解析器_在Spring中配置多个View解析器

    spring多个视图解析器 1.简介 在Spring中,提供了View Resolver来使用模型中可用的数据来解析视图,而无需与JSP,Velocity或Thymeleaf等View技术紧密绑定. ...

  4. Spring MVC 如何上传多个文件到指定位置

    Spring MVC 如何上传多个文件到指定位置 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公 ...

  5. spring boot 整合 阿里云oss上传

    Spring Boot 整合 阿里云OSS上传 OSS申请和配置 1. 注册登录 2.开通以及配置 springboot整合使用 1. 进入我们springboot的项目中,导入oss相关依赖 2. ...

  6. upload -labs通关解析及上传类型总结和思考

    Pass-01(客户端JS绕过) 客户端JS判断方法:上传一个php文件,用bp抓包,如果没抓到包就弹框说不能上传,就说明是客户端JS检测 客户端JS绕过方法: 方法一: 上传一个图片马格式为jpg, ...

  7. 如何限制上传服务器的文件容量,如何通过配置php文件限制上传文件的大小

    在网站开发的过程中,为了确保能够充分利用服务器的空间,在开发上传功能时,必须对上传文件的大小进行控制.那么我们如何进行对上传文件的大小进行控制呢? 控制文件的大小可以从两个方面入手: 第一个是在PHP ...

  8. ueditor1.4.3配置过程(包含单独上传文件以及图片的使用)

    这里使用的是ueditor1.4.3的jsp版本的UTF-8版本. 首先下载相应的ueditor,将ueditor文件夹直接拷贝到项目中,文件结构如下所示: 然后将项目要用的jar包导入到lib目录下 ...

  9. --------------springMVC的开篇,以及底层执行流程,配置视图解析器,静态资源的访问,流程图,工作原理...

    springMVC: 一:创建第一个项目 01.引入需要的jar包 web webmvc context context-support 02.在web.xml文件中 配置我们需要的核心控制器 Dis ...

最新文章

  1. 7年增长16倍,清华AI+ML课程学生数暴增 | AI Index 2018
  2. 视频+课件|国内首个基于结构光投影三维重建系列视频课程
  3. Genymotion 模拟器 VirtualBox
  4. Js提交表单的两种方法
  5. synchronized,ReetrantLock与volatile(二)
  6. Android之百度地图定位最详细使用总结
  7. LeetCode 965单值二叉树-简单
  8. python 等待其他线程执行完_面试官:如何让线程顺序执行,join,还有其他办法吗?...
  9. 数据库练习(二)三个数据库根据指定id获取name和存储数据库名称
  10. 2017.7.27 bill的挑战 失败总结
  11. 纯干货分享 | 考PMP留下来的一些重要资料(收藏下载)
  12. OWASP-安全编码规范
  13. windows7 《寒江独钓》传统键盘过滤驱动学习
  14. APP界面设计规范一(ios版)
  15. 30行代码实现微信朋友圈自动点赞
  16. C++行为型模式-实现观察者模式
  17. element-UI日期时间选择器el-date-picker
  18. 2月第三周域名主机网站排名TOP15 中国万网居首
  19. workbench无法远程连接
  20. 直流电压检测线路设计

热门文章

  1. 第一波开源年报开发者问卷中奖名单新鲜出炉!
  2. ②号团队【扫黑除恶Team】-团队任务5:项目总结会
  3. OpenGL---GLUT教程(四) GLUT动画
  4. 基于皮肤分割的磨皮算法
  5. 【cocos shader 004】 聚光灯 灯光 烘焙 效果
  6. excel matlab日期,Excel日期格式在matlab中的转换
  7. 海洋主题绘画_海底世界创意绘画作品欣赏
  8. python 3.7安装festtext、提示要更新_现代开发者必备:5个更流畅、更受欢迎的Python web框架...
  9. 轻松学会linux下查看内存频率,内核函数,cpu频率
  10. Html5浪漫结婚请柬婚礼网站模板❤_爱她就给她最美的H5婚礼请柬_(婚庆电子邀请函)含背景音乐...