配置MultipartResolver:用于处理表单中的file

<!-- 配置MultipartResolver 用于文件上传 使用spring的CommosMultipartResolver -->
<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
p:defaultEncoding="UTF-8"
p:maxUploadSize="5400000"
p:uploadTempDir="fileUpload/temp"
>
</beans:bean>
当然,要让多路解析器正常工作,你需要在classpath路径下准备必须的jar包。如果使用的是通用的多路上传解析器CommonsMultipartResolver,你所需要的jar包是commons-fileupload.jar。
当Spring的DispatcherServlet检测到一个多部分请求时,它会激活你在上下文中声明的多路解析器并把请求交给它。解析器会把当前的HttpServletRequest请求对象包装成一个支持多路文件上传的请求对象MultipartHttpServletRequest。有了MultipartHttpServletRequest对象,你不仅可以获取该多路请求中的信息,还可以在你的控制器中获得该多路请求的内容本身。
defaultEncoding="UTF-8" 是请求的编码格式,默认为iso-8859-1
maxUploadSize="5400000" 是上传文件的大小,单位为字节
uploadTempDir="fileUpload/temp" 为上传文件的临时路径

Spring MVC 处理表单中的文件上传

当解析器MultipartResolver完成处理时,请求便会像其他请求一样被正常流程处理。首先,创建一个接受文件上传的表单将允许用于直接上传整个表单。编码属性(enctype="multipart/form-data")能让浏览器知道如何对多路上传请求的表单进行编码(encode)。注意要在form标签中加上enctype="multipart/form-data"表示该表单是要处理文件的,这是最基本的东西,很多人会忘记然而当上传出错后则去找程序的错误,却忘了这一点
<html>
<head>
<title>Upload a file please</title>
</head>
<body>
<h1>Please upload a file</h1>
<form method="post" action="/form" enctype="multipart/form-data">
<input type="text" name="name"/>
<input type="file" name="file"/>
<input type="submit"/>
</form>
</body>
</html>
下一步是创建一个能处理文件上传的控制器。这里需要的控制器与一般注解了@Controller的控制器基本一样,除了它接受的方法参数类型是MultipartHttpServletRequest,或MultipartFile。
@Controller
public class FileUploadController { @RequestMapping(path = "/form", method = RequestMethod.POST)
public String handleFormUpload(@RequestParam("name") String name, @RequestParam("file") MultipartFile file) { if (!file.isEmpty()) {
byte[] bytes = file.getBytes();
// store the bytes somewhere
return "redirect:uploadSuccess";
} return "redirect:uploadFailure";
} }
请留意@RequestParam注解是如何将方法参数对应到表单中的定义的输入字段的。在上面的例子中,我们拿到了byte[]文件数据,只是没对它做任何事。在实际应用中,你可能会将它保存到数据库、存储在文件系统上,或做其他的处理。
当使用Servlet 3.0的多路传输转换时,你也可以使用javax.servlet.http.Part作为方法参数:
@Controller
public class FileUploadController { @RequestMapping(path = "/form", method = RequestMethod.POST)
public String handleFormUpload(@RequestParam("name") String name, @RequestParam("file") Part file) { InputStream inputStream = file.getInputStream();
// store bytes from uploaded file somewhere return "redirect:uploadSuccess";
} }
到此基本的文件上传就结束了。
MultipartFile类常用的一些方法:
String getContentType()//获取文件MIME类型
InputStream getInputStream()//后去文件流
String getName() //获取表单中文件组件的名字
String getOriginalFilename() //获取上传文件的原名
long getSize() //获取文件的字节大小,单位byte
boolean isEmpty() //是否为空
void transferTo(File dest) //保存到一个目标文件中。

最新文章

  1. (转)使用 SCons 轻松建造程序
  2. Vuex2.0+Vue2.0构建备忘录应用实践
  3. css3圆形头像(当图片宽高不相等时)
  4. [序列化] Serialize--序列化帮助类 (转载)
  5. IIS 7管理API——Microsoft.Web.Administration介绍
  6. [C++]现行的试卷封面并获取学生题目得分信息以及学号信息的原型系统
  7. Python开发 文件操作
  8. Python Trick —— 命令行显示
  9. 【c#】RabbitMQ学习文档(三)Publish/Subscribe(发布/订阅)
  10. 网络请求 selenium
  11. bootstrap modal 移除数据
  12. kafka的log存储解析——topic的分区partition分段segment以及索引等(转发)
  13. 【java】标示符
  14. Javascript非构造函数的继承
  15. Pytorch之CrossEntropyLoss() 与 NLLLoss() 的区别
  16. Deepin Linux下的Metasploit安装及优化
  17. ip_rcv &amp;&amp; ip_rcv_finish
  18. ubuntu更新出错--Could not get lock /var/lib/dpkg/lock
  19. Python程序员的10个常见错误(转)
  20. ubuntu14.04安装python3.7.1

热门文章

  1. jquery版本轮播图(es5版本,兼容高)
  2. java hashset输出
  3. 杂项-PIN:百科
  4. delphi 跨版本DLL调用嵌入窗体实现
  5. shell脚本批量开启防火墙端口
  6. 别把&amp;和nohup混为一谈, 根本不是同一个东西好不好 ------ 聊聊./a.out &amp; , nohut ./a.out , nohup ./a.out &amp;的区别
  7. Failure to find com.oracle:ojdbc6:jar:11.2.0.1.0
  8. 【Linux开发】Linux下jpeglib库的安装详解
  9. docker安装mysql(Baas)
  10. python+selenium下弹窗alter对象处理02