Java中mvc上传文件,SpringMVC使用MultipartFile上传文件

spring+spring mvc mybatis整合

113.5元

包邮

(需用券)

去购买 >

7c3c2fdaa721f1f38e1e8503f447af8f.png

1. MultipartFile基本介绍

MultipartFile是springmvc官方提供的一个比较完善的文件上传组件,MultipartFile是一个组织接口它的实现类有

org.springframework.web.multipart.commons.CommonsMultipartFile

org.springframework.mock.web.MockMultipartFile

它在springmvc中的org.springframework.web.multipart这个包内,与org.springframework.web.multipart.commons和org.springframework.web.multipart.support包内的类接口组合使用该。在本文中我们来说说如何在SSM整合中使用该类主键上传文件,和如何同时上传多个文件。

2. 准备工作

在写上传接口之前必须先加入流的依赖

commons-io

commons-io

2.5

commons-fileupload

commons-fileupload

1.2.2

如果在依赖jar上有不是只要加入commons-fileupload的问题,在这里要解释下。因为这个jar包1.0 版本到1.1版本的时候把org.apache.commons.io.output.DeferredFileOutputStream.class移除了,所以要使用commons-io这个jar中的这个类来弥补。所以说如果上传你碰到这个问题

HTTP Status 500 - Handler processing failed; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream,那就赶紧加入那个依赖吧。

2d41fdae4935442f21da8aa2933b860e.png

光加入依赖还是远远不够的,在前台页面也需要改不然后台接收不到数据。默认的form提交是application/x-www-form-urlencoded而上传文件是把文件用2进制的方式传输默认的格式已经满足不了需求,就需要使用multipart/form-data格式来发送接收。

1)  在form中加入enctype="multipart/form-data"

2)上传多文件的话,需在表单的input中加入multiple="multiple"。(可一次选择多个文件)

3)上传文件夹的话,需在表单input中加入webkitdirectory directory。(仅可以选择文件夹,文件夹内的文件也能成功上传)

页面写好了,还有一个重要的步奏:

设置虚拟文件夹,这是用来存放上传上来的文件。

1)双击进入服务器的设置页面

b59f88dd8d85b02bffe3393ae61f5f6e.png

2)点击add添加虚拟本地的虚拟目录

0c7805802c5fc212302466f94e1cb060.png

好了准备工作做好了,可以开始写后台业务逻辑。

3.后台代码

1)单文件上传,注意MultipartFile的实例名要与页面中表单的name值一致。

@RequestMapping("/upload_theme.do")//上传主题

publicString UploadTheme(MultipartFile meFile,Model model){if (meFile != null) {

System.out.println(meFile.getContentType());//在控制台打印文件的类型

System.out.println(meFile.getName());//返回文件的名称

System.out.println(meFile.getOriginalFilename());//返回文件的原文件名

try{

meFile.transferTo(new File("G:/temp/"+UUID.randomUUID()+meFile.getOriginalFilename()));

}catch(IllegalStateException e) {

e.printStackTrace();

model.addAttribute("msg", "上传失败");return "/error.jsp";

}catch(IOException e) {

e.printStackTrace();

model.addAttribute("msg", "上传失败");return "/error.jsp";

}

}

model.addAttribute("msg", "上传成功");return "index";

}

2)多文件上传,注意页面表单写上面说到的属性。不然不能选择多个,和选择文件夹。(页面加入webkitdirectory directory  multiple="multiple")

@RequestMapping("/upload_theme.do")//上传主题

publicString UploadTheme(HttpServletRequest request,Model model){

CommonsMultipartResolver cResolver= newCommonsMultipartResolver();if (cResolver.isMultipart(request)) {//判断是不是Multipart格式的数据

MultipartHttpServletRequest httpservletrequest = (MultipartHttpServletRequest) request;//将文件格式的请求装入MultipartHttpServletRequest对象中。

List list = httpservletrequest.getFiles("meFile");//通过调用该方法取出文件到list

for (int i = 0; i < list.size(); i++) {

System.out.println(list.get(i).getOriginalFilename());

System.out.println(list.get(i).getContentType());try{

list.get(i).transferTo(new File("G:/temp/"+UUID.randomUUID()+list.get(i).getOriginalFilename()));

}catch(IllegalStateException e) {

e.printStackTrace();

model.addAttribute("msg", "上传失败");return "/error.jsp";

}catch(IOException e) {

e.printStackTrace();

model.addAttribute("msg", "上传失败");return "/error.jsp";

}

}

}

model.addAttribute("msg", "上传成功");return "index";

}

点击提交文件夹

7eefcefcccc8bf235bcb58e143a507ee.png

文件的原文件名和文件格式都打印出来了

e1121126ccd40d02364e41927b54b5c1.png

4.最后

这上传技术分享就到这里了,看到的小伙伴有问题要不吝言辞哦。写出来不容易,点个赞吧,谢谢支持!

Spring Api : https://docs.spring.io/spring/docs/current/javadoc-api/

-----------------------------------------------------------------------------

刚发现补充一点(spring-servlet.xml中的配置):

还需要这段配置,才能完成上传操作。

原文链接:https://www.cnblogs.com/lunaticcoder/p/9813483.html

java 11官方入门(第8版)教材

79.84元

包邮

(需用券)

去购买 >

f0f3f55624fb396b1764d42d6df88864.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值