MVC目录
- 一. 🦁 前言
- 二. 🦁 文件上传 & 下载
- 1. 文件上传
- Ⅰ. 上传单个文件
- Ⅱ. 上传多个文件
- Ⅲ. 异步上传
- Ⅳ. 跨服务器上传
- 1. 添加跨服上传依赖
- 2. 创建控制器方法
- 2. 文件下载
- 三. 🦁 总结
一. 🦁 前言
SpringMVC是一个Web框架,提供了许多有用的功能,包括文件上传和下载。通过SpringMVC上传和下载文件,您可以允许用户上传文件,以便将它们存储在服务器上,或者允许用户从服务器上下载文件。这些都可以为您的应用程序添加有用的功能,例如:
-
允许用户上传和共享文件 - 如果您的应用程序需要允许用户上传和共享文件,那么SpringMVC的文件上传功能将非常有用。
-
允许用户从服务器下载文件 - 如果您的应用程序需要允许用户从服务器上下载文件,那么SpringMVC的文件下载功能将非常有用。
-
存储和管理文件 - SpringMVC的文件上传功能还可以帮助您存储和管理用户上传的文件,例如,您可以将它们保存在数据库中或在服务器上的特定目录中。
通过使用SpringMVC的文件上传和下载功能,您可以为您的应用程序添加有用的功能,并提供更好的用户体验。
接下来一起探索一下SpringMVC上传以及下载文件的功能实现!!!
二. 🦁 文件上传 & 下载
1. 文件上传
SpringMVC使用框架提供的文件解析器对象,可以直接将请求体中的文件数据转为MultipartFile对象
tips:
分布式系统不适合使用
Ⅰ. 上传单个文件
// MultipartFile参数名必须和JSP文件空间的name属性一致
@RequestMapping("/fileUpload2")
public String upload2(MultipartFile file,HttpServletRequest request) throws IOException {
// 创建文件夹,存放上传文件
String realPath = request.getSession().getServletContext().getRealPath("/upload");
File dir = new File(realPath);
if(!dir.exists()){
dir.mkdirs();
}
// 将上传的数据写到文件夹的文件中
// 1.拿到上传的文件名
String filename = file.getOriginalFilename();
filename = UUID.randomUUID()+"_"+filename;
// 2.创建空文件
File newFile = new File(dir,filename);
// 3.将数据写入空文件中
file.transferTo(newFile);
return "index";
}
Ⅱ. 上传多个文件
处理多文件上传,参数类型为MultipartFile数组,参数名和JSP文件控件的name属性一致
// 处理多文件上传,参数类型为MultipartFile数组,参数名和JSP文件控件的name属性一致
@RequestMapping("/fileUpload3")
public String upload3(MultipartFile files[],String username,HttpServletRequest request) throws Exception {
System.out.println(username);
//1.设置上传文件保存的文件夹
String realPath = request.getSession().getServletContext().getRealPath("/upload");
File dir = new File(realPath);
if (!dir.exists()){
dir.mkdirs();
}
//2.遍历数组,将上传文件保存到文件夹
for(MultipartFile file:files){
String filename = file.getOriginalFilename();
filename = UUID.randomUUID()+"_"+filename;
File newFile = new File(dir, filename);
file.transferTo(newFile);
}
return "index";
}
Ⅲ. 异步上传
前两个上传方案,在上传成功后都会跳转页面。而在实际开发中,很多情况下上传后不进行跳转,而是进行页面的局部刷新,比如:
上传头像成功后将头像显示在网页中。这时候就需要使用异步文件上传。
@RequestMapping("/fileUpload4")
//不进行页面跳转
@ResponseBody
public String upload3(HttpServletRequest request, MultipartFile file) throws Exception {
// 创建文件夹,存放上传文件。
String realPath = request.getSession().getServletContext().getRealPath("/upload");
File dir = new File(realPath);
if (!dir.exists()){
dir.mkdirs();
}
// 拿到上传文件名
String filename = file.getOriginalFilename();
filename = UUID.randomUUID()+"_"+filename;
// 创建空文件
File newFile = new File(dir, filename);
// 将上传的文件写到空文件中
file.transferTo(newFile);
// 返回文件的路径
return "/upload/"+filename;
}
Ⅳ. 跨服务器上传
tips:
如果是以tomcat作为图片服务器:
- 需要在tomcat的webapps下创建upload目录作为文件上传目录。
- 修改tomcat的 conf/web.xml 文件,支持跨服上传。
- 修改tomcat的 conf/server.xml 文件,修改tomcat端口,修改完开启tomcat服务器
1. 添加跨服上传依赖
<!-- 跨服上传 -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.18.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.18.1</version>
</dependency>
2. 创建控制器方法
该方法在接受到上传请求后将文件保存到其他服务器上。
@RequestMapping("/fileUpload5")
@ResponseBody
public String upload4(HttpServletRequest request, MultipartFile file) throws Exception {
// 设置跨服上传的服务器路径
String path = "http://localhost:8081/upload/";
// 获取上传的文件名
String filename = file.getOriginalFilename();
filename = UUID.randomUUID()+"_"+filename;
// 跨服上传:
// 1.创建客户端对象
Client client = Client.create();
// 2.使用客户端对象连接图片服务器
WebResource resource = client.resource(path + filename);
//3.传输数据
resource.put(file.getBytes());
return path+filename;
}
2. 文件下载
// 文件下载
@RequestMapping("/download")
public void fileDown(HttpServletRequest request, HttpServletResponse response,String fileName) throws IOException {
// 设置响应头
response.setHeader("Content-Disposition","attachment;filename="+fileName);
// 获取文件路径
String path = request.getSession().getServletContext().getRealPath("/upload");
File file = new File(path,fileName);
// 获取字节输出流
ServletOutputStream os = response.getOutputStream();
// 使用输出流写出文件
os.write(FileUtils.readFileToByteArray(file));
os.flush();
os.close();
}
三. 🦁 总结
到了文章的尾声,咱们这一期的分享结束,下期见!!!