SpringMvc第四战-【SpringMvc文件上传,下载】

news2024/11/25 2:31:11

目录

一.SpringMvc文件上传

1.导入依赖(在pom.xml中)

2.配置文件上传解析器(在spring-mvc.xml中)

3.前端标记多功能表单(构建一个jsp界面来操作)

4.将文件写出流,然后写入服务器

5.配置映射地址(硬盘和网络地址的映射)

5.1硬盘路径

5.2服务器路径

​编辑 

6.在resource包咯构建一个类用于映射

7.效果图形式

二.文件下载 

1.编写方法用于图片下载

2.在list.jsp增加一个图片下载的点击事件

3.展示效果图

三..jrebel的使用

1.安装jrebel插件

2.打开代理ReverseProxy_windows_amd64.exe(顺序不能错)

3.jrebel启动项目

4.启动时要输入UUID

5.设置jrebel离线(不需要打开打理)

6.再次jrebel启动项目即可运行

四.多文件上传

1.编写用于多文件上传的语句

2.在upload.jsp增加用于多文件上传的from表单

3.运行结果


前言:

小编详细的向读者展示了:如在新建一个Maven项目的情况下去搭建一个Springmvc ,mybatis,maven集成然后实现SpringMvc的CRUD,以及对于效果图的展示!本次小编带来的的关于文件的上传以及下载!

一.SpringMvc文件上传

1.导入依赖(在pom.xml中)

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.3</version>
</dependency>

2.配置文件上传解析器(在spring-mvc.xml中)

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 必须和用户JSP 的pageEncoding属性一致,以便正确解析表单的内容 -->
        <property name="defaultEncoding" value="UTF-8"></property>
        <!-- 文件最大大小(字节) 1024*1024*50=50M-->
        <property name="maxUploadSize" value="52428800"></property>
        <!--resolveLazily属性启用是为了推迟文件解析,以便捕获文件大小异常-->
        <property name="resolveLazily" value="true"/>
    </bean>

3.前端标记多功能表单(构建一个jsp界面来操作)

<%--
  Created by IntelliJ IDEA.
  User: lzzxq
  Date: 2023/9/9
  Time: 14:26
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>书籍头像上传</title>
</head>
<body>
  <form action="${pageContext.request.contextPath}/book/upload" method="post" enctype="multipart/form-data">
    <label>书籍编号:</label><input type="text" name="bid" readonly="readonly" value="${param.bid}"/><br/>
    <label>书籍图片:</label><input type="file" name="xxx"/><br/>
    <input type="submit" value="上传图片"/>
</form>

</body>
</html>

4.将文件写出流,然后写入服务器

后端利用muiltpartFile类,接收前端传递到后端的文件

@RequestMapping("/upload")
    //头像上传
    public     String  upload(Book book,MultipartFile  xxx){
       try {
        //上传的图片存放地址
        String   dir=PropertiesUtil.getValue("dir");
//     网络访问地址
        String   server=PropertiesUtil.getValue("server");
        String filename = xxx.getOriginalFilename();
        System.out.println("文件名:"+filename);
        System.out.println("文件类型:"+xxx.getContentType());
            FileUtils.copyInputStreamToFile(xxx.getInputStream(),new File(dir+filename));
           //修改字段名的属性
            book.setBname(server+filename);
            bookBiz.updateByPrimaryKeySelective(book);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return  "redirect:list";
    }

5.配置映射地址(硬盘和网络地址的映射)

5.1硬盘路径

5.2服务器路径

 

6.在resource包咯构建一个类用于映射

7.效果图形式

二.文件下载 

1.编写方法用于图片下载

//文件下载
    @RequestMapping(value="/download")
    public ResponseEntity<byte[]> download(Book  book, HttpServletRequest req){
        try {
            //先根据文件id查询对应图片信息
            Book  bk=this.bookBiz.selectByPrimaryKey(book.getBid());
            String diskPath = PropertiesUtil.getValue("dir");
            String reqPath = PropertiesUtil.getValue("server");
            String realPath = bk.getBname().replace(reqPath,diskPath);
            String fileName = realPath.substring(realPath.lastIndexOf("/")+1);
            //下载关键代码
            File file=new File(realPath);
            HttpHeaders headers = new HttpHeaders();//http头信息
            String downloadFileName = new String(fileName.getBytes("UTF-8"),"iso-8859-1");//设置编码
            headers.setContentDispositionFormData("attachment", downloadFileName);
            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
            //MediaType:互联网媒介类型  contentType:具体请求中的媒体类型信息
            return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.OK);
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

2.在list.jsp增加一个图片下载的点击事件

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

3.展示效果图

三..jrebel的使用

1.安装jrebel插件

2.打开代理ReverseProxy_windows_amd64.exe(顺序不能错)

3.jrebel启动项目

4.启动时要输入UUID

第一行输入:  http://127.0.0.1:8888/GUID

其次在浏览器输入

GUID online erstellen Kostenloses Tool, um global eindeutige Nummern (GUIDs) zu generierenicon-default.png?t=N7T8https://www.guidgen.com/

 

在将GUID赋值GUID到网址前面 

5.设置jrebel离线(不需要打开打理)

6.再次jrebel启动项目即可运行

四.多文件上传

1.编写用于多文件上传的语句

//多文件上传
    @RequestMapping("/uploads")
    public String uploads(HttpServletRequest req, Book  book, MultipartFile[] files){
        try {
            StringBuffer sb = new StringBuffer();
            for (MultipartFile cfile : files) {
                //思路:
                //1) 将上传图片保存到服务器中的指定位置
                String dir = PropertiesUtil.getValue("dir");
                String server = PropertiesUtil.getValue("server");
                String filename = cfile.getOriginalFilename();
                FileUtils.copyInputStreamToFile(cfile.getInputStream(),new File(dir+filename));
                sb.append(filename).append(",");
            }
            System.out.println(sb.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "redirect:list";
    }

2.在upload.jsp增加用于多文件上传的from表单

<form method="post" action="${pageContext.request.contextPath}/book/uploads" enctype="multipart/form-data">
      <input type="file" name="files" multiple>
      <button type="submit">上传</button>
  </form>

3.运行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/993735.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ccf-csp题解】第1次csp认证-第三题-命令行选项-字符串模拟

题目描述 思路讲解 本题是一个简单的字符串模拟题&#xff0c;这种题目是csp认证第三题的常客 大致思路是用两个bool数组记录某一个选项&#xff08;0--25下标对应小写字母a--z&#xff09;&#xff0c;第一个数组中无参选项为true&#xff0c;第二个数组中有参选项为true&a…

Pandas数据中的浅拷贝与深拷贝

pandas库主要有两种数据结构DataFrames和Series。这些数据结构在内部用索引数组和数据数组表示&#xff0c;索引数组标记数据&#xff0c;数据数组包含实际数据。现在&#xff0c;当我们试图复制这些数据结构&#xff08;DataFrames和Series&#xff09;时&#xff0c;我们实际…

如何使用PySide2将designer设计的ui文件加载到Python类上鼠标拖拽显示路径

应用场景&#xff1a; designer快速设计好UI文件后&#xff0c;需要增加一些特别的界面功能&#xff0c;如文件拖拽显示文件路径功能。 方法如下&#xff1a; from PySide2.QtWidgets import QApplication, QMainWindow from PySide2.QtUiTools import loadUiTypeUi_MainWindo…

Linux:LVS (DR群集搭建)

环境 dr服务器&#xff1a; ens33网络接口ip&#xff1a;192.168.254.4 ens33:0接口&#xff1a;192.168.254.66 web1服务器&#xff1a;ens33ip:192.168.254.1 lo:0接口ip:192.168.254.66 web2服务器&#xff1a;ens33ip:192.168.254.2 lo:0接口ip:192.168.254.66 nfs数据…

web 学习之 超链接文本

前言 HTML中的超链接文本用于创建可点击的链接&#xff0c;允许用户跳转到其他网页、文件或资源。超链接文本通常是可识别的文本或图像&#xff0c;当用户点击它时&#xff0c;浏览器会加载链接指定的目标。在HTML中&#xff0c;超链接文本使用标签&#xff08;anchor标签&…

OPC UA协议基础

C#开发使用参考github地址&#xff1a;GitHub - OPCFoundation/UA-.NETStandard: OPC Unified Architecture .NET Standard 同步到gitee的地址&#xff1a;UA-.NETStandard: github导入&#xff1a;https://github.com/OPCFoundation/UA-.NETStandard 协议参考网站&#xff1…

【23种设计模式】组合模式【⭐】

个人主页&#xff1a;金鳞踏雨 个人简介&#xff1a;大家好&#xff0c;我是金鳞&#xff0c;一个初出茅庐的Java小白 目前状况&#xff1a;22届普通本科毕业生&#xff0c;几经波折了&#xff0c;现在任职于一家国内大型知名日化公司&#xff0c;从事Java开发工作 我的博客&am…

多态语法,析构多态

目录 多态的构成条件 虚函数重写&#xff1a; 多态的构成条件 多态是在不同继承关系的类对象&#xff0c;去调用同一函数&#xff0c;产生了不同的行为。比如 Student 继承了 Person 。 Person 对象买票全价&#xff0c; Student 对象买票半价。 继承中要 构成多态两个条件 …

【PowerQuery】Excel的PowerQuery按需刷新

将数据通过PowerQuery 导入进来后,这里将进行数据分组运算,最终的数据计算结果将保存在Excel 表格中,图为销售统计结果。 在Excel中,如果我们希望进行销售统计的手动更新可以使用几种不同的方法来进行刷新: 刷新单一数据连接如果仅仅需要刷新单一数据连接的话我们可以通过…

RocketMQ_高级特性_事务消息

Apache RocketMQ在4.3.0版中已经支持分布式事务消息&#xff0c;这里RocketMQ采用了2PC的思想来实现了提交事务消息&#xff0c;同时增加一个补偿逻辑来处理二阶段超时或者失败的消息&#xff0c;如下图所示。 事务消息发送步骤如下&#xff1a; 生产者将半事务消息发送至消息队…

Bmfont 软件生成fnt 字体步骤

Bmfont 软件 用来生成 fnt 格式的字体文件和 png 图片&#xff0c;常用于cocos 游戏开发中制作动态字体。 下面手把手介绍 Bmfont 软件生成fnt 字体的详细步骤&#xff1a; 1、下载安装Bmfont 软件 2、新建文本字库 新建一个txt文本文档。 注意&#xff1a;保存为UTF-8-BOM 编…

Nuxt讲解

代码仓库 nuxt基础 内置组件 nuxt为我们提供了一些内置组件&#xff0c;可以直接使用不用导入&#xff0c;其中常用的如下 SEO组件 HtmlBodyHeadTitleMetaStyleLinkNoScriptBase SEO组件可以更加方便的让我们再页面中添加利于seo的元素 NuxtWelcome 欢迎页面组件&#…

打开深度学习的锁

打开深度学习的锁 导言一、导入的包和说明二、数据的预处理2.1 数据集说明2.2 数据集降维度并且转置2.3 数据预处理完整代码 三、逻辑回归3.1 线性回归函数公式3.2 sigmoid函数公式 四、初始化函数五、构建逻辑回归的前向传播和后向传播5.1 损失函数5.2 前向传播5.3 后向传播5.…

Excel学习 WPS版

Excel学习 1.界面基础1.1 方格移动快捷键1.2 自动适配文字长度1.3 跨栏置中1.4 多个单元格同宽度&#xff1a;1.5 下拉框选择1.6 打印预览1.7 绘制边框1.8 冻结一行多行表头1.9 分割视图 2.日期相关2.1 今日日期快捷键2.2 月份提取 3.数学公式3.1 自动增长3.2 排序3.3 筛选3.4 …

时间、时间戳互转、日期格式化、获取各种天数

我们在工作中经常遇到日期格式的转换&#xff0c;比如获取当前时间&#xff0c;转换当前时间格式为2023/09/09、2023-09-09、2023-09-09 18:12:01、时间戳、时间戳转日期、日期转时间戳、获取当前季度&#xff0c;获取上一季度、获取下一季度、获取下一周&#xff0c;获取上一周…

Android EditText setTranslationY导致输入法覆盖问题

平台 RK3288 Android 8.1 显示: 1920x1080 160 dpi 概述 碰到一个问题&#xff1a; 弹出的输入法会覆盖文本输入框。 原因&#xff1a;输入框使用了setTranslationY() 位置偏移后&#xff0c; 输入法无法正确获取焦点的位置。 分析 先上图: 初始布局 调用etTranslation…

【GO语言基础】基本数据类型

系列文章目录 【Go语言学习】ide安装与配置 【GO语言基础】前言 【GO语言基础】变量常量 【GO语言基础】数据类型 文章目录 系列文章目录数据类型数值型&#xff1a;整数类型&#xff1a;浮点数类型&#xff1a; 字符型-布尔型-字符串零值转义字符 常用类型转换运算符总结 数据…

matplotlib从起点出发(8)_Tutorial_8_Legend

1 图例教程 在matplotlib中灵活地生成Legend。 本图例指南是legend()中可用文档的扩展——在继续阅读本指南之前&#xff0c;请确保你熟悉legend()文档的内容。 本指南使用了一些常用术语&#xff0c;为清楚起见&#xff0c;此处记录了这些术语&#xff1a; legend entry 图…

【Image captioning】S2 Transformer for Image Captioning 实现流程

S2 Transformer for Image Captioning 实现流程 作者:安静到无声 个人主页 目录 S2 Transformer for Image Captioning 实现流程环境设置数据准备训练评价离线评估在线评估参考文献和引用参考引用致谢推荐专栏环境设置 克隆此存

代码随想录算法训练营第三十二天|122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II

122.买卖股票的最佳时机II 本题解法很巧妙&#xff0c;大家可以看题思考一下&#xff0c;在看题解。 代码随想录 public int maxProfit(int[] prices) {int result 0;for (int i 1; i < prices.length; i) {result Math.max(prices[i] - prices[i - 1], 0);}return re…