• SpringMVC实现文件上传和下载


    目录

    一、文件下载

    二、文件上传

    ⚪文件上传的步骤

    1.添加依赖

    2.在SpringMVC的配置文件中添加配置

    3.控制器方法

    ⚪解决文件上传过程中文件重名的问题


    一、文件下载

    ResponseEntity可以作为控制器方法的返回值,表示响应 到浏览器的完整的响应报文

    使用ResponseEntity实现下载文件的功能

    <a th:href="@{/test/down}">下载图片a>
    1. @Controller
    2. public class FileUpAndDownController {
    3. @RequestMapping("/test/down")
    4. public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException {
    5. //获取ServletContext对象
    6. ServletContext servletContext = session.getServletContext();
    7. //获取服务器中文件的真实路径
    8. String realPath = servletContext.getRealPath("img");
    9. //File.separator:路径分隔符
    10. realPath = realPath + File.separator + "star.jpeg";
    11. System.out.println(realPath);
    12. //创建输入流
    13. InputStream is = new FileInputStream(realPath);
    14. //创建字节数组,is.available()获取输入流所对应文件的字节数
    15. byte[] bytes = new byte[is.available()];
    16. //将流读到字节数组中
    17. is.read(bytes);
    18. //创建HttpHeaders对象设置响应头信息
    19. MultiValueMap headers = new HttpHeaders();
    20. //设置要下载方式以及下载文件的名字,attachment:以附件的方式进行下载,filename设置下载下来时默认的名字
    21. headers.add("Content-Disposition", "attachment;filename=1.jpeg");
    22. //设置响应状态码
    23. HttpStatus statusCode = HttpStatus.OK;
    24. //创建ResponseEntity对象
    25. ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(bytes, headers, statusCode);
    26. //关闭输入流
    27. is.close();
    28. return responseEntity;
    29. }
    30. }

    二、文件上传

    文件上传要求form表单的请求方式必须为post,并且添加属性enctype="multipart/form-data"

    SpringMVC中将上传的文件封装到MultipartFile对象中,通过此对象可以获取文件相关信息

    1. <form th:action="@{/test/up}" method="post" enctype="multipart/form-data">
    2. 头像:<input type="file" name="photo"><br>
    3. <input type="submit" value="上传">
    4. form>

    ⚪文件上传的步骤

    1.添加依赖

    1. <dependency>
    2. <groupId>commons-fileuploadgroupId>
    3. <artifactId>commons-fileuploadartifactId>
    4. <version>1.3.1version>
    5. dependency>

    2.在SpringMVC的配置文件中添加配置

    1. <bean
    2. id="multipartResolver"
    3. class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
    4. >
    5. bean>

    3.控制器方法

    1. @RequestMapping("/test/up")
    2. public String testUp(MultipartFile photo,HttpSession session) throws IOException {
    3. //获取上传的文件的文件名
    4. String fileName = photo.getOriginalFilename();
    5. //获取servletContext对象
    6. ServletContext servletContext = session.getServletContext();
    7. //获取当前工程photo目录的真实路径
    8. String photopath = servletContext.getRealPath("photo");
    9. //创建photopath所对应的File对象
    10. File file = new File(photopath);
    11. //判断file所对应目录是否存在
    12. if (!file.exists()){//如果不存在
    13. file.mkdir();//创建目录
    14. }
    15. String finalPath = photopath + File.separator + fileName;
    16. //路径 + / + photo + / + 上传的文件名
    17. //上传文件
    18. photo.transferTo(new File(finalPath));
    19. return "success";
    20. }

    ⚪解决文件上传过程中文件重名的问题

    重名时,文件中的内容会被覆盖

    1. @RequestMapping("/test/up")
    2. public String testUp(MultipartFile photo,HttpSession session) throws IOException {
    3. //获取上传的文件的文件名
    4. String fileName = photo.getOriginalFilename();
    5. //获取上传的文件的后缀名
    6. String hzName = fileName.substring(fileName.lastIndexOf("."));
    7. //获取uuid
    8. String uuid = UUID.randomUUID().toString();
    9. //拼接一个新的文件名
    10. fileName = uuid + hzName;
    11. //获取servletContext对象
    12. ServletContext servletContext = session.getServletContext();
    13. //获取当前工程photo目录的真实路径
    14. String photopath = servletContext.getRealPath("photo");
    15. //创建photopath所对应的File对象
    16. File file = new File(photopath);
    17. //判断file所对应目录是否存在
    18. if (!file.exists()){//如果不存在
    19. file.mkdir();//创建目录
    20. }
    21. String finalPath = photopath + File.separator + fileName;
    22. //路径 + / + photo + / + 上传的文件名
    23. //上传文件
    24. photo.transferTo(new File(finalPath));
    25. return "success";
    26. }

  • 相关阅读:
    JMeter如何自定义HTTP组件
    EMAS Serverless系列~4步教你快速搭建小程序
    阿里云基于边缘云业务场景的 “前端智能化” 实践
    AlphaFold2源码解析(7)--模型之Evoformer
    python
    实战-COVID-19-KSH(html+ python +django +爬虫 +pyecharts 实时疫情动态)内附MySQL详细安装配置教程
    借助AI分析哥斯拉木马原理与Tomcat回显链路挖掘
    【Java基础】面向对象进阶
    游戏后端服务器架构中的Redis应用:限流应用
    【Qt之信号和槽】对象多层嵌套后,高效使用信号和槽
  • 原文地址:https://blog.csdn.net/m0_52982868/article/details/126383299