转载地址:https://www.cnblogs.com/lunaticcoder/p/9813483.html(具体的看这个这个大佬的博客)

依赖包:

<!-- 上传文件依赖组件 -->
<!-- 这两个依赖要一起使用-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency> <dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>

前端在提交的时候也需要修改.form表单提交默认是application/x-www-form-urlencoded而上传文件把文件用2进制的方式传输,默认的格式已经满足不了需求,就需要使用multipart/form-data格式来发送接收。

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

 <form action="admin/upload_theme.do" method="post" enctype="multipart/form-data">
<input type="file" name="meFile" /><p>
<input type="submit" value="提交" /><p>
<input type="reset" value="清空" /><p>
</form>

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

 <form action="admin/upload_theme.do" method="post" enctype="multipart/form-data">
<input type="file" name="meFile" multiple="multiple" /><p>
<input type="submit" value="提交" /><p>
<input type="reset" value="清空" /><p>
</form>

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

 <form action="admin/upload_theme.do" method="post" enctype="multipart/form-data">
<input type="file" name="meFile" multiple="multiple" webkitdirectory directory /><p>
<input type="submit" value="提交" /><p>
<input type="reset" value="清空" /><p>
</form>

后端代码

单文件上传

 @RequestMapping("/upload_theme.do")//上传主题
public String 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";
}

多文件上传

 @RequestMapping("/upload_theme.do")//上传主题
public String UploadTheme(HttpServletRequest request,Model model){
CommonsMultipartResolver cResolver = new CommonsMultipartResolver();
if (cResolver.isMultipart(request)) {//判断是不是Multipart格式的数据
MultipartHttpServletRequest httpservletrequest = (MultipartHttpServletRequest) request;//将文件格式的请求装入MultipartHttpServletRequest对象中。
List<MultipartFile> 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";
}

Spring的xml文件配置如下

  <!-- Spring MVC -->

         <!-- 配置组件扫描 -->
<context:component-scan
base-package="export.controller" /> <!-- 配置ViewResolver -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix"
value="/web/" />
<property name="suffix"
value=".jsp" />
</bean>
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 上传文件大小上限,单位为字节(10MB) -->
<property name="maxUploadSize">
<value>10485760</value>
</property>
<!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1 -->
<property name="defaultEncoding">
<value>UTF-8</value>
</property>
</bean>
<!-- 注解驱动 -->
<mvc:annotation-driven />

以及MultipartFile对象中的常用方法如下:

byte[] getBytes():获取文件数据
String getContentType[]:获取文件MIME类型,如image/jpeg等
InputStream getInputStream():获取文件流
String getName():获取表单中文件组件的名字
String getOriginalFilename():获取上传文件的原名
Long getSize():获取文件的字节大小,单位为byte
boolean isEmpty():是否有上传文件
void transferTo(File dest):将上传文件保存到一个目录文件中

非常感谢@花裤都派大星 原谅我转载了你的帖子

也可以看看这些博客:https://blog.csdn.net/qian_ch/article/details/69258465

          https://www.cnblogs.com/WJ-163/p/6269409.html

使用MultipartFile上传文件的更多相关文章

  1. SpringBoot 使用MultipartFile上传文件相关问题解决方案

    1.当上传时未配置上传内容大小,会报错[org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException ...

  2. spring mvc MultipartFile 上传文件 当文件较小时(10k) ,无法上传成功 。

    <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 --> <bean id="multipartResolver" cla ...

  3. spring mvc MultipartFile 上传文件错误解决

    Field error in object 'xxxx' on field 'xxxx': rejected value [20129259128131.jpg]; codes [typeMismat ...

  4. SpringMVC上传文件的MultipartFile源码

    零.MultipartFile上传文件的具体实例如下: http://blog.csdn.net/swingpyzf/article/details/20230865 一.具体类和方法 上传文件主要方 ...

  5. 三 : spring-uploadify上传文件

    一 : applicationContext.xml中:必须声明不然获取不到<!-- 上传文件的配置 --> <bean id="multipartResolver&quo ...

  6. 云笔记项目- 上传文件报错"java.lang.IllegalStateException: File has been moved - cannot be read again"

    在做文件上传时,当写入上传的文件到文件时,会报错“java.lang.IllegalStateException: File has been moved - cannot be read again ...

  7. Springmvc 上传文件MultipartFile 转File

    转自:http://blog.csdn.net/boneix/article/details/51303207 业务场景:ssm框架 上传文件到应用服务器过程中要传到专有的文件服务器并返回url进行其 ...

  8. springBoot上传文件时MultipartFile报空问题解决方法

    springBoot上传文件时MultipartFile报空问题解决方法 1.问题描述: 之前用spring MVC,转成spring boot之后发现上传不能用.网上参考说是spring boot已 ...

  9. springmvc上传文件报错org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.web.multipart.MultipartFile]

    在用springmvc+mybatis进行项目开发时,上传文件抛异常... org.springframework.beans.BeanInstantiationException: Could no ...

随机推荐

  1. # 20175213 2018-2019-2 《Java程序设计》第1周学习总结

    在本周的java学习中,我收获了很多也遇到了很多的困难1.在寒假的预学习中,因为没能完全的安好虚拟机,导致在本周的学习一开始,虚拟机就崩溃了,所以又重新开始重头安装虚拟机.但因为网速等各种问题,虚拟机 ...

  2. 记账本,C,Github,entity

    package entity; public class Category { private int id; private String name; private int recordNumbe ...

  3. ABAP级别【技能树】

  4. UGUI中Text的换行

    通过代码中的\n可以直接执行换行效果,但是我们在平常的工作中一般都是读表,既在Inspector面板中的Text组件中输入同样的内容就达不到换行效果: 其实unity把\n转变成了\\n,我们只需要变 ...

  5. phpcms的一些问题 乱码,安装

    一.乱码:我这的网站出现的乱码情况:后台栏目名乱码,迁站后更新缓存,再更新栏目,内容,前台都乱码. 找了半天原因,经过本地测试,没问题,一上线就出现问题,不同点就是线上的数据库版本是mysql5.5, ...

  6. mysql面试题集

    Mysql 的存储引擎,myisam和innodb的区别. 答: 1.MyISAM 是非事务的存储引擎,适合用于频繁查询的应用.表锁,不会出现死锁,适合小数据,小并发.5.6之前默认myisam 2. ...

  7. C++中的仿函数

    仿函数:实质就是重载了小括号(),通过类,定义一个对象,对象可以被实例化,具有内存可以存储数据,把需要比较的数据事先给到类对象的成员,这样在比较两个值的时候,可以只传入需要被比较的值即可.因为比较的值 ...

  8. 查看linux中tcp连接数

    一.查看哪些IP连接本机 netstat -an 二.查看TCP连接数 1)统计80端口连接数netstat -nat|grep -i "80"|wc -l 2)统计httpd协议 ...

  9. 描述符__get__,__set__,__delete__

    描述符__get__,__set__,__delete__ # 描述符:1用来代理另外一个类的属性 # __get__():调用一个属性时,触发 # __set__():为一个属性赋值时触发 # __ ...

  10. python基础之Day13

    一.有参装饰器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ...