Kite的学习历程之SpringMVC文件上传
程序员文章站
2022-06-06 14:42:15
...
Kite学习框架的第十三天
这里我会先介绍基本的文件上传,在介绍SpringMVC文件上传
前提:
在pom.xml中导入相应的依赖
<!--文件上传依赖-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
</dependencies>
1.基础的文件上传
1.1 先创建一个jsp页面添加文件上传页面
创建时注意: form标签method使用post,还需要设定属性enctype为multipart/form-data
当 form 表单的 enctype 取值为 Mutilpart/form-data 时,请求正文内容就变成: 每一部分都是 MIME 类型描述的正文 ;默认的取值为,request.getParameter(),如果为这个取值,则不能进行文件上传
<%--
Created by IntelliJ IDEA.
User: 小风筝
Date: 2020/6/19
Time: 16:13
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>主页</title>
</head>
<body>
<h3>文件上传</h3>
<%--enctype="multipart/form-data" :将表单分为不同部分,进行上传--%>
传统的文件上传方式<br/>
<form action="user/fileUpLoad1" method="post" enctype="multipart/form-data">
选择文件<input type="file" value="浏览" name="upload"/><br/>
<input type="submit" value="文件上传"/>
</form>
</body>
</html>
1.2 创建一个控制类
- 创建一个接收文件的文件夹
- 先获取request对象,在通过解析request对象获取文件内容,
package cn.kitey.controller;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.List;
/**
* 文件上传控制类
*/
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/fileUpLoad1")
public String fileUpLoad1(HttpServletRequest request) {
System.out.println("基本的文件上传了!");
//使用fileupload组件完成文件上传
//创建文件上传存储位置
String path ="D:\\java\\mybatis-spring-springmvc\\SpringMvcSource\\uploads\\";
//判断该路径下是否存在该文件,如果不存在进行创建
File file = new File(path);
if(!file.exists()){
//创建该文件夹
file.mkdirs();
}
//解析request对象,获取上传对象
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//解析request
List<FileItem> fileItems = null;
try {
fileItems = upload.parseRequest(request);
} catch (FileUploadException e) {
e.printStackTrace();
}
//对获取的对象进行遍历
for (FileItem fileItem : fileItems) {
//进行判断,当前的item对象是否事上传文件项
if(fileItem.isFormField()){
//表单项
}else {
//文件项
//获取文件上传的名称
String filename = fileItem.getName();
//完成文件上传
try {
fileItem.write(new File(path,filename));
} catch (Exception e) {
e.printStackTrace();
}
//删除缓存文件
fileItem.delete();
}
}
System.out.println(path);
return "success";
}
}
这时可以启动服务器进行文件上传
2. 基于SpringMVC的文件上传
2.1 在index.jsp中添加SpringMVC文件上传的form标签
基于SpringMVC 的文件上方式 <br/>
<form action="user/fileUpLoad2" method="post" enctype="multipart/form-data">
<%--这里的name必须为upload--%>
选择文件<input type="file" value="浏览" name="upload"/><br/>
<input type="submit" value="文件上传"/>
</form>
2.2 在视图控制类添加springMVC文件上传的控制方法
- 这里我们需要获取MultipartFile对象,这个对象中SpringMVC已经将文件进行了提取
- 使用该对象的transferTo方法将文件写入文件夹
- 这里我获取了当前的时间对文件进行可命名,让上传的文件名不冲突
/**
* 使用SpringMVC上传文件
* @param request
* @param upload
* @return
*/
@RequestMapping("/fileUpLoad2")
public String fileUpLoad2(HttpServletRequest request, MultipartFile upload) {
System.out.println("SpringMVC文件上传了!");
//使用fileupload组件完成文件上传
//创建文件上传存储位置
String path ="D:\\java\\mybatis-spring-springmvc\\SpringMvcSource\\uploads\\";
//判断该路径下是否存在该文件,如果不存在进行创建
File file = new File(path);
if(!file.exists()){
//创建该文件夹
file.mkdirs();
}
//获取文件上传名称
String filename = upload.getOriginalFilename();
long newTime = System.currentTimeMillis();
//重新定义文件名
filename = newTime+filename;
//完成文件上传
try {
upload.transferTo(new File(path,filename));
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(path);
return "success";
}
2.3 在springMVC中配置文件解析器
注意注意注意 重要的事说三遍这里定义的class的一定要为multipartResolver
这样文件解析器才可以进行解析
<!--
配置文件解析器
注意这里的id值不惜为multipartResolver
-->
<bean id ="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--更上传文件的最大值(这里定义为10M)-->
<property name="maxUploadSize" value="10485760"></property>
</bean>
这时我们可以进行服务器运行了
index.jsp页面
文件上传成功跳转页面
文件夹产生文件截图
以上就是文件上传的基本内容了加油
下一篇: 卖炭翁的境界