MVC目录

  • 一. 🦁 前言
  • 二. 🦁 文件上传 & 下载
  • 1. 文件上传
  • Ⅰ. 上传单个文件
  • Ⅱ. 上传多个文件
  • Ⅲ. 异步上传
  • Ⅳ. 跨服务器上传
  • 1. 添加跨服上传依赖
  • 2. 创建控制器方法
  • 2. 文件下载
  • 三. 🦁 总结


一. 🦁 前言

SpringMVC是一个Web框架,提供了许多有用的功能,包括文件上传和下载。通过SpringMVC上传和下载文件,您可以允许用户上传文件,以便将它们存储在服务器上,或者允许用户从服务器上下载文件。这些都可以为您的应用程序添加有用的功能,例如:

  1. 允许用户上传和共享文件 - 如果您的应用程序需要允许用户上传和共享文件,那么SpringMVC的文件上传功能将非常有用。
  2. 允许用户从服务器下载文件 - 如果您的应用程序需要允许用户从服务器上下载文件,那么SpringMVC的文件下载功能将非常有用。
  3. 存储和管理文件 - 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;
}

Ⅳ. 跨服务器上传

springmvc 导出的工具 springmvc文件下载功能_mvc

tips:

如果是以tomcat作为图片服务器:

  1. 需要在tomcat的webapps下创建upload目录作为文件上传目录。
  2. 修改tomcat的 conf/web.xml 文件,支持跨服上传。
  3. 修改tomcat的 conf/server.xml 文件,修改tomcat端口,修改完开启tomcat服务器

springmvc 导出的工具 springmvc文件下载功能_java_02

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. 文件下载

springmvc 导出的工具 springmvc文件下载功能_java_03

// 文件下载
@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();
}

三. 🦁 总结

到了文章的尾声,咱们这一期的分享结束,下期见!!!