文件上传的三要素:【表单三要素】
- 表单项: type:=“file”。
- 表单的提交方式:post。
- 表单的encype属性是多部份表单的形式,entype=”multipart/form-data”。
代码示例:
文件上传的原理:
单文件上传:
单文件上传的步骤:
- 导入文件上传的相关坐标。
- 在springMVC配置文件中进行配置文件上传解析器。
- 编写文件上传的代码。
导入文件上传的相关坐标:
<!-- 文件上传的坐标-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<!-- 文件上传功能 需要的坐标-->
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
配置文件上传解析器:
<!-- 配置文件上传解析器 id中的值是固定的不可以改变的-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置文件上传的总大小【上限】-->
<property name="maxUploadSize" value="5242800"/>
<!-- 上传单个文件的大【上限】小-->
<property name="maxUploadSizePerFile" value="5242800"/>
<!-- 设置上传文件的编码类型-->
<property name="defaultEncoding" value="UTF-8"/>
</bean>
文件上传的代码:
@PostMapping("/save18")
@ResponseBody
//MultipartFile 对象专门接收客户端上传的文件 其实例对象代表了一个在multipart请求中接收到的待上传文件 然后将其封装成对象
//MultipartFile 属性名要和表单上传项的name的属性值一样
private void sjdsdo(String name, MultipartFile file){
//方法是获取上传文件的名称
String originalFilename = file.getOriginalFilename();
try {
//设置上传文件的存储路径
file.transferTo(new File("D:\\1\\"+originalFilename));
} catch (IOException e) {
e.printStackTrace();
}
上面配置文件上传解析也是依赖于依赖注入。那么怎样调用呢,使用spring来进行调用。
并且上面配置文件上传解析器的Bean的id值是固定不变的。原因是:文件上转解析器是由spring来调用的,在spring的核心配置类中,就已经将一些配置的值就已经固定好了。所以id的值不能改变。
spring源码:
多文件上传文件的实现:
多文件的上传步骤和单文件上传的步骤相同:
多文件相比较于单文件上传的代码的变动如下:
业务类接收上传文件参数的变化:
针对多文件上传的问题使用数组的形式来接收。
表单提交代码的name属性内容的改变:
在文件选择的表单项中的name的属性值保持一致,目的是为了在业务方法以数组的形式接收上传的文件。