SpringMVC使用StandardServletMultipartResolver上传文件
DispatcherServlet并没有实现任何解析multipart请求数据的功能,它将该任务委托给了Spring中MultipartResolver策略接口的实现,通过该接口的实现类来解析multipart请求中的内容。从Spring3.1开始,Spring内置了两个MultipartResolver的实现供我们选择:
StandardServletMultipartResolver 依赖于Servlet3.0对multipart请求的支持(始于Spring3.1)
CommonsMultipartResolver 使用Jakarta Commons FileUpload解析multipart请求
一般来说,StandardServletMultipartResolver将会是优先选择的方案,它使用了Servlet所提供的原生功能支持,并不需要依赖任何第三方组件。如果我们需要将应用部署到Servlet3.0之前的容器中,或者还没有使用Spring3.1或者更高的版本,那么可能就需要使用CommonsMultipartResolver了
(1)将StandardServletMultipartResolver添加到Spring容器中
@Bean
public MultipartResolver multipartResolver(){
return new StandardServletMultipartResolver();
}
(2)在Servlet中(DispatcherServlet)指定multipart的配置
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
super.customizeRegistration(registration);
String location = "d:\\tmp\\";
File file = new File(location);
if(!file.exists() && !file.isDirectory()){
file.mkdir();
}
long maxFileSize = 2097152; //2M
long maxRequestSize = 4194304; //4M
int fileSizeThreshold = 0;
MultipartConfigElement multipartConfigElement = new MultipartConfigElement(location,maxFileSize,maxRequestSize,fileSizeThreshold);
registration.setMultipartConfig(multipartConfigElement);//配置对multipart的支持
}
(3)编写上传文件的Form表单
将<form>标签的enctype设置为multipart/form-data,这会告诉浏览器以multipart数据的形式提交表单,而不是以表单数据的形式进行提交。
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>上传页面</title>
</head>
<body>
<form method="post" th:action="@{/file/upload}" enctype="multipart/form-data">
描述:<input type="text" name="desc"/>
文件:<input type="file" name="file" accept="image/jpeg,image/png,image/gif"/>
<input type="submit" value="上传"/>
</form>
</body>
</html>
(4)编写上传的控制器
@PostMapping("/file/upload")
public String upload(@RequestParam String desc, @RequestParam MultipartFile file) throws IOException {
if(!file.isEmpty()){
String filePath = "d:\\img\\";
File fileDir = new File(filePath);
if(!fileDir.exists() && !fileDir.isDirectory()){
fileDir.mkdir();
}
file.transferTo(new File(filePath + file.getOriginalFilename()));
}
return "file/upload";
}
SpringMVC使用StandardServletMultipartResolver上传文件的更多相关文章
- springMVC+jsp+ajax上传文件
工作中遇到的小问题,做个笔记 实现springMVC + jsp + ajax 上传文件 HTML <body> <form id="myform" method ...
- springMvc 使用ajax上传文件,返回获取的文件数据 附Struts2文件上传
总结一下 springMvc使用ajax文件上传 首先说明一下,以下代码所解决的问题 :前端通过input file 标签获取文件,通过ajax与后端交互,后端获取文件,读取excel文件内容,返回e ...
- SpringMVC使用CommonsMultipartResolver上传文件
DispatcherServlet并没有实现任何解析multipart请求数据的功能,它将该任务委托给了Spring中MultipartResolver策略接口的实现,通过该接口的实现类来解析mult ...
- SpringMVC+jquery.uploadify 上传文件
前言 以前用Asp.net MVC+uploadify上传文件,最近学习SpringMVC,所以就用SpringMVC+uploadify做个上传文件的demo. 刚开始用form表单的方式提交,在C ...
- SpringMVC使用FileUpload上传文件
进口FileUpload和common-io的Jar包 注意:1.Struts2其它方法需要使用的:struts2过滤,将改变reqeust类型,由HttpServletRequest成为MultiP ...
- springMVC结合AjaxForm上传文件
最近在项目中需要上传文件文件,之前一直都是form提交的,尝试了一下AjaxForm,感觉还比较好用,写篇随笔mark下,供以后使用. 准备工作: 下载jquery-form.js 相关jar: co ...
- springmvc 使用ajx上传文件 不设置form enctype
最近在做一个小项目 碰到这个问题 解决方案如下 1.js代码如下 获取当前form 转换为formdata ajax提交到后台 var form = $("#importForm" ...
- SpringMvc通过controller上传文件代码示例
上传文件这个功能用的比较多,不难,但是每次写都很别扭.记录在此,以备以后copy用. package com.**.**.**.web.api; import io.swagger.annotatio ...
- springmvc跨域上传文件问题
把以下文件放到webapps的root文件夹下: 1.clientaccesspolicy.xml <?xml version="1.0" encoding="ut ...
随机推荐
- flex.css
flex.css:https://codepen.io/webstermobile/pen/apXEER/
- python_while
while 格式 while 条件 : pass 使用 while True : print("精忠报国") print("粉红的回忆") print(&quo ...
- vue 相关
1.vue v-for 循环一个数组,key值报错,但是数据是正常显示的 报错: v-for使用key,需要在key前加上:key;srcList是个数组,key值绑定不能是数据类型Object的it ...
- centos关机与重启命令
Linux centos重启命令: 1.reboot 普通重启 2.shutdown -r now 立刻重启(root用户使用) 3.shutdown -r 10 过10分钟自动重启(root用户 ...
- button样式的demo
<style type="text/css"> .styletop{margin-top: 200px;} .stylea{ margin-left:550px;} ; ...
- mysql-笔记-控制语句/string方法
1 case case value when [compare_value] then result [when[compare_value] then result....] [else resul ...
- Leetcode 4.28 string
1. 38. Count and Say 就是对于前一个数,找出相同元素的个数,把个数和该元素存到新的string里.数量+字符 class Solution { public String coun ...
- Python之Mock的入门
参考文章: https://segmentfault.com/a/1190000002965620 一.Mock是什么 Mock这个词在英语中有模拟的这个意思,因此我们可以猜测出这个库的主要功能是模拟 ...
- Go语言中的make和new
相同点: make和new都是用来创建分配类型内存的. 不同点: 先看下面的代码 package main import "fmt" func main(){ var i *int ...
- DRF 缓存解决方案 drf-extensions / redis
drf-extensions 概述 drf-extensions组件内部提供了 DRF 的本地内存方式的缓存方式 本地内存方式缓存在项目重启后则会消失 官方点击 这里 安装 pip3 install ...