• SpringMVC之文件上传下载以及jrebel的使用


    目录

    一.文件上传

    1.1.导入依赖

     1.2.配置文件上传解析器

     ​​​​​​​ 1.3 配置服务器存放文件地址

    1.3.1.点击编辑Configurations

     1.3.2.将项目部署至tomcat服务器上

     1.3.3.配置相对路径

     1.4.导入PropertiesUtil工具类

     1.5.编写resource.properties

    1.6.添加sql

     1.7.编写PageController类

     1.8.编写主页展示界面

     1.9.编写文件上传方法

     1.10.搭建一个图片上传的操作页面 

     二.文件下载

    三.多文件上传

    四,jrebel的介绍

     4.1.jrebel插件的安装

    4.2.打开代理

     4.3.设置jrebel离线

    最后SpringMVC之文件上传下载以及jrebel的使用就到这里,祝大家在敲代码的路上一路通畅!

    感谢大家的观看 !


    一.文件上传

    以下实例演示的代码是基于本人博客中的代码进行扩展 : SpringMVC的整合完成CRUD

    1.1.导入依赖

    导入依赖:

    1. commons-fileupload
    2. commons-fileupload
    3. 1.3.3

     1.2.配置文件上传解析器

    在spring-mvc.xml中配置文件上传解析器,代码如下:

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

     CommonsMultipartResolver是MultipartResolver接口的实现类

     ​​​​​​​ 1.3 配置服务器存放文件地址

    具体操作如下:

    1.3.1.点击编辑Configurations

     1.3.2.将项目部署至tomcat服务器

     1.3.3.配置相对路径

     

    注:本地路径名需与resource.properties资源文件中路径保持一致。

     

     1.4.导入PropertiesUtil工具类

    1. package com.junlinyi.utils;
    2. import java.io.IOException;
    3. import java.io.InputStream;
    4. import java.util.Properties;
    5. public class PropertiesUtil {
    6. public static String getValue(String key) throws IOException {
    7. Properties p = new Properties();
    8. InputStream in = PropertiesUtil.class.getResourceAsStream("/resource.properties");
    9. p.load(in);
    10. return p.getProperty(key);
    11. }
    12. }

     1.5.编写resource.properties

    创建一个名为resource.properties的资源文件,如下:

    1. dir=D:/temp/upload/
    2. server=/upload/

     dir作为上传图片的真实地址,而server即是网络访问地址。 

    1.6.添加sql

    在逆向生成后的musicmapper.xml中加入以下代码:

     紧接着在自动生成的mapper类中加入以下代码:

    List listPager(Work work);

     1.7.编写PageController类

    然后再创建一个公共路径处理类 PageController类,代码如下:

    1. package com.junlinyi.web;
    2. import org.springframework.stereotype.Controller;
    3. import org.springframework.web.bind.annotation.PathVariable;
    4. import org.springframework.web.bind.annotation.RequestMapping;
    5. /**
    6. * @author junlinyi
    7. * @site www.junlinyi.com
    8. * @company 君氏集团
    9. * @create 2023-09-07-15:01
    10. *
    11. * 用来处理页面跳转
    12. */
    13. @Controller
    14. public class PageController {
    15. //新增 新增界面
    16. @RequestMapping("/page/{page}")
    17. public String toPage(@PathVariable("page") String page){
    18. return page;
    19. }
    20. @RequestMapping("/page/{dir}/{page}")
    21. public String toDirPage(@PathVariable("dir") String dir,
    22. @PathVariable("page") String page){
    23. return dir + "/" + page;
    24. }
    25. }

     1.8.编写主页展示界面

    主页代码 list.jsp如下:

    1. <%@ page language="java" contentType="text/html; charset=UTF-8"
    2. pageEncoding="UTF-8"%>
    3. <%@ taglib uri="http://jsp.veryedu.cn" prefix="z"%>
    4. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    5. "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    6. "Content-Type" content="text/html; charset=UTF-8">
    7. href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.css"
    8. rel="stylesheet">
    9. src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.js">
    10. 职位列表
    11. "form-inline"
    12. action="${pageContext.request.contextPath }/work/list" method="post">
    13. "form-group mb-2">
    14. "text" class="form-control-plaintext" name="dname"
    15. placeholder="请输入职业人名">
    16. "pagination" value="false" type="hidden">
  • "${pageBean }">
  • ${pageBean }
  •  1.9.编写文件上传方法

    在我们的WorkController控制器中增加文件上传的方法进行配置,要增加的代码如下:

    1. //文件上传
    2. @RequestMapping("/upload")
    3. public String upload(Work work,MultipartFile m){
    4. try {
    5. // 3.后端可以直接利用mutipartFile类,接受前端传递到后台的文件
    6. //上传的图片真实存放地址
    7. String dir = PropertiesUtil.getValue("dir");
    8. //网络访问地址
    9. String server = PropertiesUtil.getValue("server");
    10. String fileName = m.getOriginalFilename();
    11. System.out.println("文件名:"+fileName);
    12. System.out.println("文件类别:"+m.getContentType());
    13. //4.将文件转成流,然后写入服务器(某一个硬盘)
    14. FileUtils.copyInputStreamToFile(m.getInputStream(),new File(dir+fileName));
    15. work.setMpic(server+fileName);
    16. workBiz.updateByPrimaryKeySelective(work);
    17. } catch (IOException e) {
    18. e.printStackTrace();
    19. }
    20. return "redirect:list";
    21. }

     1.10.搭建一个图片上传的操作页面 

    创建一个新的upload.jsp页面作为图片上传操作页面,upload.jsp代码如下:

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. 专辑图片上传
    3. "${pageContext.request.contextPath}/work/upload" method="post" enctype="multipart/form-data">
    4. "text" name="mid" readonly="readonly" value="${param.mid}"/>
    5. "file" name="m"/>
    6. "submit" value="上传图片"/>
    7. "post" action="${pageContext.request.contextPath}/work/uploads" enctype="multipart/form-data">
    8. "file" name="files" multiple>

     然后启动tomcat服务器访问路径进行测试,测试结果如下:

    处理中。。。。

     二.文件下载

    在Controller层中加入以下代码,如下:

    1. //文件下载实现
    2. @RequestMapping(value="/download")
    3. public ResponseEntity<byte[]> download(Work work,HttpServletRequest req){
    4. try {
    5. //先根据文件id查询对应图片信息
    6. Work work = this.musworkicBiz.selectByPrimaryKey(work.getdid());
    7. String diskPath = PropertiesUtil.getValue("dir");
    8. String reqPath = PropertiesUtil.getValue("server");
    9. String realPath = work.getdtp().replace(reqPath,diskPath);
    10. String fileName = realPath.substring(realPath.lastIndexOf("/")+1);
    11. //下载关键代码
    12. File file=new File(realPath);
    13. HttpHeaders headers = new HttpHeaders();//http头信息
    14. String downloadFileName = new String(fileName.getBytes("UTF-8"),"iso-8859-1");//设置编码
    15. headers.setContentDispositionFormData("attachment", downloadFileName);
    16. headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    17. //MediaType:互联网媒介类型 contentType:具体请求中的媒体类型信息
    18. return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.OK);
    19. }catch (Exception e){
    20. e.printStackTrace();
    21. }
    22. return null;

     之后重启tomcat服务器进行测试,结果如下:

    处理中。。。

    三.多文件上传

    多文件上传和普通文件上传的区别:

    参数类型不同:多文件上传使用MultipartFile[]作为参数类型,而普通文件上传使用MultipartFile作为参数类型。
    前端表单处理不同:多文件上传需要使用input[type=“file”]的multiple属性,并选择多个文件进行上传,而普通文件上传只能选择单个文件上传。
    后端处理方式不同:多文件上传需要接收文件数组,可以对每个文件进行处理;普通文件上传只能接收单个文件。

     在Controller层中加入以下代码,如下:

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

     增加完后重启tomcat服务器进行测试,测试结果如下:

    处理中。。。

    四,jrebel的介绍

    使用 JRebel 启动项目有以下好处:

    • 快速部署:JRebel 允许在应用程序运行时热部署代码和资源文件,而无需重新启动整个应用程序。这大大提高了开发效率,省去了传统的重启应用程序的时间。
    • 即时生效:JRebel 对于大部分代码和资源的修改,都能够实时生效,无须手动重新编译和重新部署。这使得开发人员能够立即看到他们所做的更改的效果,快速迭代开发。
    • 保持应用状态:JRebel 可以保持应用程序的状态,包括各种已经加载的类、对象、变量等。这意味着在代码修改后,应用程序的状态仍然可以保持不变,不会丢失用户的登录状态、缓存数据等。
    • 支持多种框架和技术栈:JRebel 不仅适用于 Java SE 和 Java EE 应用程序,还支持许多主流的框架和技术栈,如Spring、Hibernate、Maven、Gradle等。这使得 JRebel 能够应用于各种类型的项目。
    • 减少开发周期:由于 JRebel 的快速部署和即时生效特性,开发人员可以迅速验证和修改他们的代码,减少了开发周期。这有助于提高团队的开发效率和项目的交付速度。

     4.1.jrebel插件的安装

     重启后的IDEA是这样的:

     但是此时我们还需要打开代理(黑窗口)才可以用jrebel启动项目。如下:

    4.2.打开代理

    下载代理,进行jrebel的使用:

     4.3.设置jrebel离线

    打开代理后点击jrebel启动项目,会弹出以下窗口,具体操作如下:

    1.在弹出框中Team URL下方第一个输入框输入:

     http://127.0.0.1:8888/0e63ac70-2074-46d3-9de1-46fb2befde0a

    2.在第二个输入框输入自己的邮箱。

    3.勾选 I agree with the term...

    4.最后点击最下方按钮Activete JRebel即可。

    设置完jrebel离线之后,在用jrebel插件启动项目之前就可以不打开代理辅助工具了。

    最后SpringMVC之文件上传下载以及jrebel的使用就到这里,祝大家在敲代码的路上一路通畅!

    感谢大家的观看 !

  • 相关阅读:
    在线问诊 Python、FastAPI、Neo4j — 生成 Cypher 语句
    LeetCode简单题之合并相似的物品
    Redis 图形化桌面客户端
    搭建GraphQL服务
    SpringCloud&Nacos注册中心服务分级存储模型
    17-Linux进程管理
    数模5—蒙特卡洛算法、灰色预测
    leetcode148. 排序链表
    Linux下企业级夜莺监控分析工具的远程访问设置【内网穿透】
    AIGC+思维导图:提升你的学习与工作效率的「神器」
  • 原文地址:https://blog.csdn.net/m0_74915426/article/details/132797684