springMVC和springBoot使用MultipartFile上传文件

您现在的位置是:网站首页>>信息浏览 文章详情

springMVC和springBoot使用MultipartFile上传文件
2019-03-02 00:28 书生个人博客管理员 1325

springMVC和SpringBoot使用MultipartFile上传单文件和多个文件非常的容易,springMVC是在Apache Commens FileUpload的技术上实现了一个MultipartResolver实现类,用到了MultipartFile类来接收参数。于是springMVC上传要Apache Commens FileUpload的组件,及它的jar包。

对于SpringBoot来说不用任何配置,只要在pom文件中添加依赖Apache Commens FileUpload的组件的就行。但是spring-boot也自带了org.springframework.web.multipart.MultipartFile,而且我们可以在application. properties配置文件限制上传文件的大小:
application. properties文件

  1. # 上传文件总的最大值
  2. spring.servlet.multipart.max-request-size=10MB
  3. # 单个文件的最大值
  4. spring.servlet.multipart.max-file-size=10MB

当然我们可以用java配置来配置MultipartResolver

  1. @Bean
  2. public MultipartResolver multipartResolver{
  3. commonsMultipartResolver multipartResolver=new commonsMultipartResolver();
  4. multipartResolver.setMaxUploadSize(100000);//设置上传最大
  5. return multipartResolver;
  6. }

因为不是SpringBoot,所以SpringMVC上下文中并没有默认装配MultipartResolver,所以我们要在MVC的配置文件中添加以下配置:

springmvc-config.xml文件

  1. <bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver">
  2. <!-- 上传文件大小上限,单位为字节(10MB) -->
  3. -<property name="maxUploadSize">
  4. <value>10485760</value>
  5. </property>
  6. <!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1 -->
  7. <property name="defaultEncoding">
  8. <value>UTF-8</value>
  9. </property>
  10. </bean>

注意:记得添加commons-fileupload的jar包放到类路径下,也可以放在lib目录中。
1.普通上传,SpringMVc上传实列:
form表单

  1. <form action="upload" enctype="multipart/form-data" method="post">
  2. <table>
  3. <tr>
  4. <td>文件描述:</td>
  5. <td><input type="text" name="description"></td>
  6. </tr>
  7. <tr>
  8. <td>请选择文件:</td>
  9. <td><input type="file" name="file"></td>
  10. </tr>
  11. <tr>
  12. <td><input type="submit" value="上传"></td>
  13. </tr>
  14. </table>
  15. </form>

控制层接收

  1. @Controller
  2. public class FileUploadController{
  3. // 上传文件会自动绑定到MultipartFile中
  4. @RequestMapping(value="/upload",method=RequestMethod.POST)
  5. public String upload(HttpServletRequest request,
  6. @RequestParam("description") String description,
  7. @RequestParam("file") MultipartFile file) throws Exception{
  8. System.out.println(description);
  9. // 如果文件不为空,写入上传路径
  10. if(!file.isEmpty()){
  11. // 上传文件路径
  12. String path = request.getServletContext().getRealPath(
  13. "/images/");
  14. // 上传文件名
  15. String filename = file.getOriginalFilename();
  16. File filepath = new File(path,filename);
  17. // 判断路径是否存在,如果不存在就创建一个
  18. if (!filepath.getParentFile().exists()) {
  19. filepath.getParentFile().mkdirs();
  20. }
  21. // 将上传文件保存到一个目标文件当中
  22. file.transferTo(new File(path+File.separator+ filename));
  23. return "success";
  24. }else{
  25. return "error";
  26. }
  27. }
  28. }

SpringMVC会将上传的文件绑定在MultipartFile的对象中,而MultipartFile对象提供各种方法操作文件,还可以用transferTo()方法将文件存在磁盘中。常用的方法:

byte[] getBytes()获取文件数据
String getContentType() 获取mime信息,如image/jpeg
InputStream getInputStream 获取文件流
String getName()获取文件名
String getOriginalFilename() 获取文件原名
transferTo(File to) 将文件保存到目标文件中
注意:表单的method设置为post,enctype为multipart/form-data

2.当然我们也可以用对象来保存,这样更方便:

  1. // 域对象,实现序列化接口
  2. public class User implements Serializable{
  3. private String description;
  4. private MultipartFile file;
  5. //setting方法和getting方法
  6. }
  7. @Controller
  8. public class FileUploadController{
  9. @RequestMapping(value="/upload")
  10. public String register(HttpServletRequest request,
  11. @ModelAttribute User user,
  12. Model model)throws Exception{
  13. System.out.println(user.getDescription());
  14. }
  15. }

这样我们就可以把附件和描述保存在User对象中了。

3.多文件上传接收
单文件的话只需要一个变量即,多文件上传的话就将MultipartFile改为数组,然后分别上传保存即可

  1. <form method="post" action="/multiUpload" enctype="multipart/form-data">
  2. <input type="file" name="file"><br>
  3. <input type="file" name="file"><br>
  4. <input type="file" name="file"><br>
  5. <input type="submit" value="提交">
  6. </form>
  7. @RequestMapping(value="/multiUpload", method=RequestMethod.POST )
  8. public @ResponseBody String multipleSave(@RequestParam("file") MultipartFile[] files){
  9. String fileName = null;
  10. String msg = "";
  11. if (files != null && files.length >0) {
  12. for(int i =0 ;i< files.length; i++){
  13. try {
  14. fileName = files[i].getOriginalFilename();
  15. byte[] bytes = files[i].getBytes();
  16. BufferedOutputStream buffStream =
  17. new BufferedOutputStream(new FileOutputStream(new File("/tmp/" + fileName)));
  18. buffStream.write(bytes);
  19. buffStream.close();
  20. msg += "You have successfully uploaded " + fileName";
  21. } catch (Exception e) {
  22. return "You failed to upload " + fileName + ": " + e.getMessage();
  23. }
  24. }
  25. return msg;
  26. } else {
  27. return "Unable to upload. File is empty.";
  28. }
  29. }
  30. }
赞 (159)
文章出处:书生个人博客          转载注明下哦!o(≧v≦)o~~

标签:

相似文章:


展开阅读全文
随便说两句
请先登录
遵守国家法律法规,请勿回复无意义内容,请不要回复嵌套过多的楼层!