• 【SpringMVC】文件上传与下载、JREBEL使用


    目录

    一、引言

    二、文件的上传

    1、单文件上传

    1.1、数据表准备

    1.2、添加依赖

    1.3、配置文件

    1.4、编写表单

    1.5、编写controller层

    2、多文件上传

    2.1、编写form表单

    2.2、编写controller层

    2.3、测试

    三、文件下载

    四、JREBEL使用

    1、下载注册

    2、离线设置


    一、引言

    为什么要使用文件的上传下载?作用?

    SpringMVC文件上传下载是一个常见的功能,它可以让用户上传文件到服务器或者从服务器下载文件。这对于许多Web应用程序来说是必不可少的功能,比如在线存储、文档管理系统等。SpringMVC提供了一些方便的注释和API,可以使文件上传和下载变得非常简单。在文件上传方面,SpringMVC提供了@RequestParam注释和MultipartFile类,可以轻松地处理上传的文件。在文件下载方面,SpringMVC提供了ResponseEntity类,可以将文件作为响应发送给客户端。

    二、文件的上传

    1、单文件上传

    1.1、数据表准备

    根据自己的表来也是可以的,只是用来保存数据

    1.2、添加依赖

    在你的spring mvc里面的pom.xml里面添加文件上传的依赖

    1. <dependencies>
    2. <dependency>
    3. <groupId>commons-fileuploadgroupId>
    4. <artifactId>commons-fileuploadartifactId>
    5. <version>${commons-fileupload.version}version>
    6. dependency>
    7. dependencies>

    1.3、配置文件

    在自己的spring-mvc.xml文件里面添加配置

    1. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    2. <property name="defaultEncoding" value="UTF-8">property>
    3. <property name="maxUploadSize" value="52428800">property>
    4. <property name="resolveLazily" value="true"/>
    5. bean>

    下面我提供我的文件配置

    1. "1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xmlns:context="http://www.springframework.org/schema/context"
    5. xmlns:aop="http://www.springframework.org/schema/aop"
    6. xmlns:mvc="http://www.springframework.org/schema/mvc"
    7. xsi:schemaLocation="http://www.springframework.org/schema/beans
    8. http://www.springframework.org/schema/beans/spring-beans.xsd
    9. http://www.springframework.org/schema/context
    10. http://www.springframework.org/schema/context/spring-context-4.3.xsd
    11. http://www.springframework.org/schema/aop
    12. http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
    13. http://www.springframework.org/schema/mvc
    14. http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    15. <context:component-scan base-package="com.tgq"/>
    16. <mvc:annotation-driven/>
    17. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    18. <property name="viewClass"
    19. value="org.springframework.web.servlet.view.JstlView">property>
    20. <property name="prefix" value="/WEB-INF/jsp/"/>
    21. <property name="suffix" value=".jsp"/>
    22. bean>
    23. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    24. <property name="defaultEncoding" value="UTF-8">property>
    25. <property name="maxUploadSize" value="52428800">property>
    26. <property name="resolveLazily" value="true"/>
    27. bean>
    28. <aop:aspectj-autoproxy/>
    29. beans>

    1.4、编写表单

    表单提交方式为method="post"enctype="multipart/form-data"

    1. <%--
    2. Created by IntelliJ IDEA.
    3. User: tgq
    4. Date: 9/9/2023
    5. Time: 下午2:41
    6. To change this template use File | Settings | File Templates.
    7. --%>
    8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    9. <html>
    10. <head>
    11. <title>图片上传title>
    12. head>
    13. <body>
    14. <form action="${pageContext.request.contextPath }/sc/upload" method="post" enctype="multipart/form-data">
    15. <label>编号:label><input type="text" name="cid" readonly="readonly" value="${param.cid}"/><br/>
    16. <label>图片:label><input type="file" name="zx"/><br/>
    17. <input type="submit" value="上传图片"/>
    18. form>
    19. body>
    20. html>

    上传图片的name名字不能和数据库表名的列名一样,但是必须要和后端的代码的名字一样

    1.5、编写controller层

    1. @Controller
    2. @RequestMapping("/sc")
    3. public class StrutsClasController {
    4. @Autowired
    5. private StrutsClasBiz strutsClasBiz;
    6. /**
    7. * 文件上传
    8. *

    9. * // * @param req
    10. * // * @param strutsClas
    11. *
    12. * @param zx
    13. * @return
    14. */
    15. @RequestMapping(value = "/upload")
    16. public String upload(StrutsClas strutsClas, MultipartFile zx) {
    17. // public String upload(HttpServletRequest req, StrutsClas strutsClas, MultipartFile pic) {
    18. try {
    19. //思路:
    20. //1) 将上传图片保存到服务器中的指定位置
    21. // 本地保存地址
    22. // String dir = PropertiesUtil.getValue("dir");
    23. String dir="d:/";
    24. // 网络保存地址/upload/
    25. // String server = PropertiesUtil.getValue("server");
    26. String server="/upload/";
    27. // 文件名
    28. String filename = zx.getOriginalFilename();
    29. // System.out.println("文件名:" + filename);
    30. // 文件类别
    31. // System.out.println("文件类别" + zx.getContentType());
    32. System.out.println(strutsClas);
    33. FileUtils.copyInputStreamToFile(zx.getInputStream(), new File(dir + filename));
    34. //2) 更新数据库表t_struts_class图片记录
    35. strutsClas.setPic(server + filename);
    36. strutsClasBiz.updateByPrimaryKeySelective(strutsClas);
    37. } catch (Exception e) {
    38. e.printStackTrace();
    39. }
    40. return "redirect:list";
    41. }
    42. }

    配置tomcat的时候记得添加upload地址映射

    2、多文件上传

    2.1、编写form表单

    1. <form method="post" action="/sc/uploads" enctype="multipart/form-data">
    2. <input type="file" name="files" multiple>
    3. <button type="submit">上传button>
    4. form>

    2.2、编写controller层

    1. /**
    2. * 多文件上传
    3. *
    4. * @param req
    5. * @param clas
    6. * @param files
    7. * @return
    8. */
    9. @RequestMapping("/uploads")
    10. public String uploads(HttpServletRequest req,MultipartFile[] files) {
    11. try {
    12. StringBuffer sb = new StringBuffer();
    13. for (MultipartFile cfile : files) {
    14. //思路:
    15. //1) 将上传图片保存到服务器中的指定位置
    16. String dir = "D:/temp/upload/";
    17. String server = "/upload/";
    18. String filename = cfile.getOriginalFilename();
    19. FileUtils.copyInputStreamToFile(cfile.getInputStream(), new File(dir + filename));
    20. sb.append(filename).append(",");
    21. }
    22. System.out.println(sb.toString());
    23. } catch (Exception e) {
    24. e.printStackTrace();
    25. }
    26. return "redirect:list";
    27. }

    2.3、测试

    但我们选择多个文件上传

    我们的本地文件为空


    当我们上传之后本地就会进行上传

    运用到我们的数据库也是一样的

    三、文件下载

    根据自己的表来进行操作

    <a href="${pageContext.request.contextPath }/sc/download?cid=${b.cid}">下载图片a>

    编写编写controller层方法

    1. /**
    2. * 文件下载
    3. *
    4. * @param strutsClas
    5. * @param req
    6. * @return
    7. */
    8. @RequestMapping(value = "/download")
    9. public ResponseEntity<byte[]> download(StrutsClas strutsClas, HttpServletRequest req) {
    10. try {
    11. //先根据文件id查询对应图片信息
    12. StrutsClas strutsClas1 = this.strutsClasBiz.selectByPrimaryKey(strutsClas.getCid());
    13. //需要下载的地址
    14. String diskPath = PropertiesUtil.getValue("dir");
    15. //服务器里面保存图片的地址
    16. String reqPath = PropertiesUtil.getValue("server");
    17. String realPath = strutsClas1.getPic().replace(reqPath, diskPath);
    18. String fileName = realPath.substring(realPath.lastIndexOf("/") + 1);
    19. //下载关键代码
    20. File file = new File(realPath);
    21. HttpHeaders headers = new HttpHeaders();//http头信息
    22. String downloadFileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");//设置编码
    23. headers.setContentDispositionFormData("attachment", downloadFileName);
    24. headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    25. //MediaType:互联网媒介类型 contentType:具体请求中的媒体类型信息
    26. return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.OK);
    27. } catch (Exception e) {
    28. e.printStackTrace();
    29. }
    30. return null;
    31. }

    当我们点击下载的时候就会进行下载

    四、JREBEL使用

    1、下载注册

    搜索插件JRebel 并且下载,安装成功之后会让你重启,重启之后按操作来

    在弹出框里面进行注册

    在第一个里面填写 http://127.0.0.1:8888/GUID   

    GUID:更改为GUID online erstellen  里面生成的ID填写

    最后确认注册

    启动你的代理。然后运行JRebel

    2、离线设置

    进入我们的设置,前提是我们要开始我们的代理才能进行这个操作

  • 相关阅读:
    案例研究丨运动品牌On昂跑如何通过DTC创新实现全球化战略
    JSD-2204-(业务逻辑开发)-开发分类功能-分页查询-Day08
    PWA 踩坑 - 第一次加载页面后无法获取CacheStorage某些资源
    顺序表的快慢指针应用:leetcode26、27、88、大数加法989(交换数组)
    提高Oracle数据库缓存命中率
    VB.NET之SqlCommand详解
    JVM探究「狂神说」
    QT获取计算机硬件信息
    Swagger的简单介绍,集成,以及如何在生产环境中关闭swagger,在测试和开发环境中自动打开
    题目1444:蓝桥杯201 4年第五届真题斐波那契
  • 原文地址:https://blog.csdn.net/weixin_74383330/article/details/132776908