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

springMVC和springBoot使用MultipartFile上传文件
2019-03-02 00:28 许多年以后 3352

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()方法将文件存在磁盘中。常用的方法:

  1. byte[] getBytes()获取文件数据
  2. String getContentType() 获取mime信息,如image/jpeg
  3. InputStream getInputStream 获取文件流
  4. String getName()获取文件名
  5. String getOriginalFilename() 获取文件原名
  6. 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. }
  1. @Controller
  2. public class FileUploadController{
  3. @RequestMapping(value="/upload")
  4. public String register(HttpServletRequest request,
  5. @ModelAttribute User user,
  6. Model model)throws Exception{
  7. System.out.println(user.getDescription());
  8. }
  9. }

这样我们就可以把附件和描述保存在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>
  1. @RequestMapping(value="/multiUpload", method=RequestMethod.POST )
  2. public @ResponseBody String multipleSave(@RequestParam("file") MultipartFile[] files){
  3. String fileName = null;
  4. String msg = "";
  5. if (files != null && files.length >0) {
  6. for(int i =0 ;i< files.length; i++){
  7. try {
  8. fileName = files[i].getOriginalFilename();
  9. byte[] bytes = files[i].getBytes();
  10. BufferedOutputStream buffStream =
  11. new BufferedOutputStream(new FileOutputStream(new File("/tmp/" + fileName)));
  12. buffStream.write(bytes);
  13. buffStream.close();
  14. msg += "You have successfully uploaded " + fileName";
  15. } catch (Exception e) {
  16. return "You failed to upload " + fileName + ": " + e.getMessage();
  17. }
  18. }
  19. return msg;
  20. } else {
  21. return "Unable to upload. File is empty.";
  22. }
  23. }
  24. }
赞 (7)
文章出处:书生个人博客          转载注明下哦!o(≧v≦)o~~

标签: springboot系列上传文件原创

相似文章:


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