使用MultipartFile上传文件
转载地址: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上传文件的更多相关文章
- SpringBoot 使用MultipartFile上传文件相关问题解决方案
1.当上传时未配置上传内容大小,会报错[org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException ...
- spring mvc MultipartFile 上传文件 当文件较小时(10k) ,无法上传成功 。
<!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 --> <bean id="multipartResolver" cla ...
- spring mvc MultipartFile 上传文件错误解决
Field error in object 'xxxx' on field 'xxxx': rejected value [20129259128131.jpg]; codes [typeMismat ...
- SpringMVC上传文件的MultipartFile源码
零.MultipartFile上传文件的具体实例如下: http://blog.csdn.net/swingpyzf/article/details/20230865 一.具体类和方法 上传文件主要方 ...
- 三 : spring-uploadify上传文件
一 : applicationContext.xml中:必须声明不然获取不到<!-- 上传文件的配置 --> <bean id="multipartResolver&quo ...
- 云笔记项目- 上传文件报错"java.lang.IllegalStateException: File has been moved - cannot be read again"
在做文件上传时,当写入上传的文件到文件时,会报错“java.lang.IllegalStateException: File has been moved - cannot be read again ...
- Springmvc 上传文件MultipartFile 转File
转自:http://blog.csdn.net/boneix/article/details/51303207 业务场景:ssm框架 上传文件到应用服务器过程中要传到专有的文件服务器并返回url进行其 ...
- springBoot上传文件时MultipartFile报空问题解决方法
springBoot上传文件时MultipartFile报空问题解决方法 1.问题描述: 之前用spring MVC,转成spring boot之后发现上传不能用.网上参考说是spring boot已 ...
- springmvc上传文件报错org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.web.multipart.MultipartFile]
在用springmvc+mybatis进行项目开发时,上传文件抛异常... org.springframework.beans.BeanInstantiationException: Could no ...
随机推荐
- grains和pillar的联合使用
在编写sls文件的时候,对于不同的客户端,在配置管理的时候,其安装的环境,配置文件和启动的服务都相同: 如果完全是不同的环境,建议写单独的sls文件,不要混合在一起; 如果是相同的环境,只不过对于不同 ...
- jQuery.extend 与 jQuery.fn.extend
extend方法为jQuery对象的核心之一,语法如下: jQuery.extend([deep], target, object1, [objectN]),返回值Object. 概述:用一个或多个其 ...
- oracle数据库分页总结
/* BEGIN CREATE TABLE APPUSER(IDS NUMBER(8), USERNAME VARCHAR2(20), PASSWORD VARCHAR2(20), CTIME DAT ...
- python note 07 集合
1.删除特例 lis = [11,22,33,44,55] for i in range(len(lis)): print(i) del lis[i] print(lis) #每删除链表中一个值链表就 ...
- $.fn.extend() 问:我来这个世上到底是干嘛的?
好好好 乖 本宝宝来告诉你 你来是干嘛的啊~ 话不多说 直接上码 当然如下代码是在jquery环境下运行的 HTML JS 完事~~~ 当你点击div元素的时候 你会发现弹出来“我被单击了”这句 ...
- application/json和application/x-www-form-urlencoded使用选择
一.参考资料 选application/x-www-form-urlencoded还是application/json? @RequestBody应用 二.理解 1.@RequestBody的作用 注 ...
- webplus知识点小结
1.返回首页,要在首页栏目里面加链接,直接预览站点的时候地址栏那个地址就行 2.上传图片变色问题,要传jpg格式,不要png 3.留言板制作:后台组件管理->留言板->获取链接 然后在留言 ...
- Git使用方法(精心整理,绝对够用)转载
Git使用方法(精心整理,绝对够用) 一.git客户端(本地仓库)的一些操作 1.设置账户(需要和github账户设置一致) git config --global user.name xxx g ...
- ubuntu服务器搭建DVWA站点
把DVWA里面的文件夹拷贝到/var/www/html里面去 1.安装之前先更新系统 sudo apt update 2.安装Apache2 sudo apt install apache2 3.安装 ...
- 【对比分析四】position的absolute与fixed共同点与不同点
共同点: (1) 改变行内元素的呈现方式,display被置为block: (2) 让元素脱离普通流,不占据空间: (3) 默认会覆盖到非定位元素上 不同点: absolute的”根元素“是可以设置的 ...