当前位置: 首页 > news >正文

SpringMVC实现文件上传和下载功能

文件下载

ResponseEntity用于控制器方法的返回值类型,该控制器方法的返回值就是响应到浏览器的响应报文。具体步骤如下:

  1. 获取下载文件的位置;
  2. 创建流,读取文件;
  3. 设置响应信息,包括响应头,响应体以及响应码;
  4. 返回ResponseEntity对象
@Controller
@ResponseBody
public class UpAndDownController {@RequestMapping("/test/down")public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException{/*** 1. 获取文件的地址*/// 获取ServletContext对象ServletContext servletContext = session.getServletContext();// 获取服务器的中文件的真实路径String path = servletContext.getRealPath("img");System.out.println("path: " + path);  // path: D:\IdeaProject\springmvc_ResponseBody_RequestBody\target\springmvc-1.0-SNAPSHOT\imgString realPath = path + File.separator + "1.jpg";  // File.separator表示拼接符 “/” 或者“\”,方便拼接不会出错System.out.println("realPath: " + realPath);  // realPath: D:\IdeaProject\springmvc_ResponseBody_RequestBody\target\springmvc-1.0-SNAPSHOT\img\1.jpg/*** 2. 创建流,读取文件*/// 创建输入流FileInputStream is = new FileInputStream(realPath);// 创建字节数组byte[] bytes = new byte[is.available()];  // is.available: 返回从此输入流中可以读取(或跳过)的剩余字节数的估计值// 将流读到字节数组中is.read(bytes);/*** 3. 设置响应信息,包括响应头,响应体以及响应码*/// 创建HttpHeaders对象设置响应头信息MultiValueMap<String, String> headers = new HttpHeaders();// 设置要下载方式以及下载文件的名字headers.add("Content-Disposition", "attachment;filename=1.jpg");// 设置响应状态码HttpStatus statusCode = HttpStatus.OK;// 创建ResResponseEntity对象ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(bytes, headers, statusCode);// 关闭输入流is.close();return responseEntity;}
}

文件上传

 文件上传要求form表单的请求方式必须为post, 并且添加属性enctype=“multipart/form-data”。SpringMVC中上传的文件封装到MultipartFile对象中,通过此对象可以获取文件相关信息。文件上传步骤如下:

  1. 添加依赖
  <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency>
  1. 在SpringMVC的配置文件中添加配置
 <!--上传文件, id名必须为multipartResolver--><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>

前端代码

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>index</title>
</head>
<body>
<form th:action="@{/test/up}" method="post" enctype="multipart/form-data">头像: <input type="file" name="photo"><br><input type="submit" value="上传文件">
</form>
</body>
</html>

后端代码

@RequestMapping("/test/up")public String testUp(MultipartFile photo, HttpSession httpSession) throws IOException{/*** 1. 获取文件的名称*/// 获取上传文件的名称String filename = photo.getOriginalFilename();String hzName = filename.substring(filename.lastIndexOf("."));  // 得到后缀名System.out.println(hzName);  // .jpgSystem.out.println(UUID.randomUUID());filename = UUID.randomUUID().toString() + hzName;/*** 2. 创建文件的存储位置*/// 获取服务器中photo目录的路径ServletContext servletContext = httpSession.getServletContext();String photoPath = servletContext.getRealPath("photo");File file = new File(photoPath);if(!file.exists()) file.mkdir();String finalPath = photoPath + File.separator + filename;/*** 3. 文件上传*/// 实现上传功能photo.transferTo(new File(finalPath));return "success";}
http://www.lryc.cn/news/162621.html

相关文章:

  • CHS零壹视频恢复程序OCR使用方法
  • 云备份——服务端客户端联合测试
  • L2 数据仓库和Hive环境配置
  • 【iOS】MVC
  • JavaScript-----jQuery
  • Stream流
  • javaee spring 声明式事务管理方式2 注解方式
  • 基于SpringBoot+微信小程序的智慧医疗线上预约问诊小程序
  • 注意力机制讲解与代码解析
  • 微调 TrOCR – 训练 TrOCR 识别弯曲文本
  • Jetsonnano B01 笔记7:Mediapipe与人脸手势识别
  • vue学习之v-if/v-else/v-else-if
  • ansible的安装和简单的块使用
  • Android 状态栏显示运营商名称
  • 10.Xaml ListBox控件
  • 基于vue3和element-plus的省市区级联组件
  • Paper: 利用RNN来提取恶意软件家族的API调用模式
  • sdkman 安装以及 graalvm安装
  • 如何正确使用 WEB 接口的 HTTP 状态码和业务状态码?
  • Spark【Spark SQL(三)DataSet】
  • 制作立体图像实用软件:3DMasterKit 10.7 Crack
  • 高校 Web 站点网络安全面临的主要的威胁
  • vue前端解决跨域
  • 【Cicadaplayer】解码线程及队列实现
  • 把文件上传到Gitee的详细步骤
  • 基于keras中Lenet对于mnist的处理
  • Python爬虫 教程:IP池的使用
  • Ansible之playbook剧本
  • unique_ptr的大小探讨
  • 人工智能TensorFlow PyTorch物体分类和目标检测合集【持续更新】