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

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

目录

一.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: lzzxqDate: 2023/9/9Time: 14:26To 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.运行结果

相关文章:

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

目录 一.SpringMvc文件上传 1.导入依赖&#xff08;在pom.xml中&#xff09; 2.配置文件上传解析器&#xff08;在spring-mvc.xml中&#xff09; 3.前端标记多功能表单&#xff08;构建一个jsp界面来操作&#xff09; 4.将文件写出流&#xff0c;然后写入服务器 5.配置映…...

一种结合白平衡统计信息和曝光信息的软光敏算法专利学习(专利四)

图像分块&#xff1a; 参见下图&#xff0c;一幅图像大小为5*6(像素)&#xff0c;每个像素包含R、G、B三个分量&#xff0c;该图像划分为4个分块&#xff0c;第一分块的大小为3*3像素&#xff0c;第二分块的大小为3*3(像素)&#xff0c;第三分块的大小为2*3像素&#xff0c;第四…...

华为数通方向HCIP-DataCom H12-821题库(单选题:301-320)

第301题 某台路由器运行 IS-IS,其输出信息如图所示,下列说法错误的是? [R1]display isis sdb local verboseDatabase information for ISIS(1) Level-1 Link State Database LSPID Seq Num Checksum Holdtime…...

dll文件反编译源代码 C#反编译 dotpeek反编译dll文件后export

目录 背景下载安装dotpeek导入dll文件export导出文件参考 背景 项目合作的时候&#xff0c;使用前人的或者其他部门dll文件直接在机台运行&#xff0c;会出现很多问题&#xff0c;逻辑&#xff0c;效率等等&#xff0c;此时我们可以选择对他们的代码进行反编译和重构&#xff…...

地图结构 | 图解占据栅格地图原理(附Matlab建图实验)

目录 0 专栏介绍1 栅格地图1.1 应用场景1.2 基本概念 2 占据栅格地图2.1 更新模型2.2 截断策略 3 仿真实现3.1 算法流程3.2 Matlab实现 0 专栏介绍 &#x1f525;附C/Python/Matlab全套代码&#x1f525;课程设计、毕业设计、创新竞赛必备&#xff01;详细介绍全局规划(图搜索…...

element-plus点击菜单栏全部展开问题解决

这是由子菜单项的index属性引起的&#xff0c;子菜单项的index属性添加相同的值时就会出现这种情况。所以为每个子菜单项添加不同的index属性值就可解决。...

React 简便获取经纬度

以下是关于React获取定位经纬度的代码解释&#xff1a; import React, { useEffect, useState } from react;const LocationComponent () > {const [latitude, setLatitude] useState(null);const [longitude, setLongitude] useState(null);useEffect(() > {navigat…...

【多线程】线程安全的单例模式

线程安全的单例模式 饿汉模式懒汉模式单线程版多线程版多线程版(改进) 单例模式能保证某个类在程序中只存在 唯一 一份实例, 而不会创建出多个实例&#xff0c;从而节约了资源并实现数据共享。 比如 JDBC 中的 DataSource 实例就只需要一个. 单例模式具体的实现方式, 分成 “饿…...

Competitive Collaboration 论文阅读

论文信息 题目&#xff1a;Competitive Collaboration: Joint Unsupervised Learning of Depth, Camera Motion, Optical Flow and Motion Segmentation 作者&#xff1a;Anurag Ranjan&#xff0c; Varun Jampani&#xff0c; Lukas Balles 来源&#xff1a;CVPR 时间&#x…...

非科班菜鸡算法学习记录 | 代码随想录算法训练营完结!

这俩月终于结束了233333&#xff0c;之后就是反复复习和背八股了吧&#xff0c;然后整整项目春招再投投投&#xff0c;感觉大部分题都有思路了但是做过的题也会没思路&#xff0c;还是要复习 总结 数组&#xff1a; 双指针用的很多&#xff0c;一般一个指向遍历位置&#xff0…...

C语言实现三字棋

实现以下&#xff1a; 1游戏不退出&#xff0c;继续玩下一把&#xff08;循环&#xff09; 2应用多文件的形式完成 test.c. --测试游戏 game.c -游戏函数的实现 game.h -游戏函数的声明 (2)游戏再走的过程中要进行数据的存储&#xff0c;可以使用3*3的二维数组 char bor…...

【LeetCode】35.复杂链表的复制

题目 请实现 copyRandomList 函数&#xff0c;复制一个复杂链表。在复杂链表中&#xff0c;每个节点除了有一个 next 指针指向下一个节点&#xff0c;还有一个 random 指针指向链表中的任意节点或者 null。 示例 1&#xff1a; 输入&#xff1a;head [[7,null],[13,0],[11,4]…...

代码大全阅读随笔(五)

数据初始化要点&#xff1a; 数据初始化过程很容易出错&#xff0c;所以请使用本章介绍的方法&#xff0c;来初始化数据&#xff0c;从而避免由于非预期的初始化值而造成的错误。 最小化变量作用域。 使用相同的变量的语句尽可能的集中在一起。 早期绑定会减少灵活性&#xff0…...

No1.详解【2023年全国大学生数学建模竞赛】C题——蔬菜类商品的自动定价与补货决策(代码 + 详细输出 + 数据集代码 下载)

时间告诉你什么叫衰老,回忆告诉你什么叫幼稚。不要总在过去的回忆里纠缠,昨天的太阳,晒不干今天的衣裳。 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿 🌟[3] 2022年度博客…...

有什么好用的电容笔?apple pencil替代品推荐

近年来&#xff0c;电容笔越来越成为人们日常生活中常见的数码产品之一。电容笔的便捷性得到了消费者的认可。它逐渐取代无纸化书写。那么到底电容笔哪个品牌好呢&#xff0c;电容笔哪一款最好用呢&#xff0c;今天小编给大家总结几款市面好用的电容笔&#xff0c;让我们一起来…...

什么是回调函数?写出一个示例?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 回调函数⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前…...

深度学习在医疗保健领域的应用:从图像识别到疾病预测

文章目录 深度学习在医学影像识别中的应用1. 癌症检测2. 病理学图像分析3. 医学图像分割 深度学习在疾病预测中的应用1. 疾病风险预测2. 疾病诊断辅助3. 药物研发 深度学习在个性化治疗中的应用1. 基因组学分析2. 临床数据集成 深度学习在医疗保健中的挑战和未来数据隐私和安全…...

SpringBoot实现自定义environment中的value加密

environment中的value为什么要加密&#xff1f; 未经过加密的配置文件&#xff0c;密码均是采用明文密码&#xff0c;很容易导致信息泄露。 SpringBoot environment中的value加密代码如下 package com.xxx.core.encryption;import com.google.common.collect.Maps; import lomb…...

celery的用法--任务调度

在Celery中&#xff0c;任务&#xff08;Task&#xff09;是执行特定操作的基本单元。任务可以异步执行&#xff0c;可以带有参数&#xff0c;可以返回结果&#xff0c;可以链式调用&#xff0c;还可以设置任务优先级、超时等属性。 1.定义任务&#xff1a; 使用app.task装饰器…...

MyBatis-Plus学习笔记总结

一、查询 构造器分为QueryWrapper和LambdaQueryWrapper 创建实体类User package com.system.mybatisplus.model;import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...