SpringMVC的文件上传文件下载多文件上传---详细介绍

目录

前言:

一,文件上传

1.1 添加依赖

1.2  配置文件上传解析器

1.3 表单设置

1.4 文件上传的实现

二,文件下载

controller层

 前端jsp

三,多文件上传

Controller层

运行


前言:

    Spring MVC 是一个基于 Java 的 Web 框架,提供了方便的文件上传和下载功能,以及支持多文件上传的能力。下面是对文件上传、文件下载和多文件上传的详细概念以及它们带给我们的便利好处的解释和实例

一,文件上传

本文章根据上篇文章实现增删改查(CURD)http://t.csdn.cn/tFC6m进行扩展实现文件上传等一系列操作


文件上传是指将本地文件传输到服务器端的过程。在 Web 开发中,文件上传常用于用户提交图片、文档等文件到服务器,以供后续处理或存储。

案例:

1.1 添加依赖

  如果有实现博主上一篇文章pom.xml依赖,可能已经导入过了,可以再检查一遍

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

1.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>

1.3 表单设置

定义一个jsp页面

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

<form action="${ctx}/clz/upload" method="post" enctype="multipart/form-data"><label>班级编号:</label><input type="text" name="bid" readonly="readonly" value="${param.cid}"/><br/><label>班级图片:</label><input type="file" name="xxx"/><br/><input type="submit" value="上传图片"/>
</form>

1.4 文件上传的实现

之一句话:文件从哪里来(读流),放哪里去(写流)。

为了使代码更规范更简约,我们把上传图片存储地址及网络访问地址,放到一个文件中,在controller层调用即可

建立一个名为resource.properties:

上方server中是图片的地址隐射

  • controller层

//文件上传下载@RequestMapping("/upload")//映射路径public String upload(Tbook tbook,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));//相当于某一张图片的访问地址  保存到数据库中tbook.setBname(server+filename);tbookBiz.updateByPrimaryKeySelective(tbook);} catch (IOException e) {e.printStackTrace();}return "redirect:list";}

前端jsp编写:

运行结果:

成功运行后修改网络地址book/list 点击图片上传选择一张图片并点击上传图片,在相对应的编号展示相对应的图片

二,文件下载

在controller层添加一个方法,在方法中注释 //下载关键代码以下的代码可能在以后操作图片下载,都是固定代码。直接copy即可并提高效率

controller层

@RequestMapping(value="/download")public ResponseEntity<byte[]> download(Tbook tbook,HttpServletRequest req){try {//先根据文件id查询对应图片信息Tbook clz = this.tbookBiz.selectByPrimaryKey(tbook.getBid());String diskPath = PropertiesUtil.getValue("dir");String reqPath = PropertiesUtil.getValue("server");String realPath = clz.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;}

 前端jsp

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

运行结果:

运行成功后修改网络地址book/list,点击图片下载即可下载图片

三,多文件上传

将多个文件保存到指定的存储的文件夹中

Controller层

 //多文件上传@RequestMapping("/uploads")public String uploads(HttpServletRequest req, Tbook Tbook, 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";}

运行

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ES-索引管理

前言 数据类型 ​ 搜索引擎是对数据的检索&#xff0c;所以我们先从生活中的数据说起。我们生活中的数据总体分为两种&#xff1a; 结构化数据非结构化数据 结构化数据&#xff1a; 也称作行数据&#xff0c;是由二维表结构来逻辑表达和实现的数据&#xff0c;严格地遵循数…

idea中mapper直接跳转到xml的插件

一.点击File | Settings | Plugins&#xff0c;下载插件 二、重启idea

分割等和子集【动态规划】

分割等和子集 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 class Solution {//testpublic boolean canPartition(int[] nums) {if(nums null || nums.length 0) return false;int n nums…

如何曲线斩获大厂校招SP Offer

大家好&#xff0c;我是洋子&#xff0c;时至9月&#xff0c;24届校招正式批笔试环节很多公司都开始了&#xff0c;近期也有同学逐渐开始正式批面试&#xff0c;今天分享一篇22届学长的上岸大厂测开经验指南&#xff0c;干货满满 原文链接 https://zhuanlan.zhihu.com/p/479687…

virtualbox虚拟机中安装FreeDOS系统和DJGPP编译环境

一、安装FreeDOS系统 1、从官网下载FreeDOS系统镜像&#xff0c;下载的压缩包中包含两个文件&#xff1a;后缀为.iso和.img的镜像 ​​​下载页面 http://www.freedos.org/download/ 直接下载链接 https://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.…

TOWE雷达光敏感应开关,让生活更智能、更安全

现代生活中&#xff0c;智能家居成为人们追求品质生活的必备之选。其中&#xff0c;照明控制的智能化已然成为一种趋势&#xff0c;传统的灯光开关需要人们手动操作&#xff0c;既不方便&#xff0c;有时候也会造成资源的过度浪费&#xff0c;而雷达光敏感应开关的出现&#xf…

05 C/C++ 指针复杂类型说明 9月5日

目录 C语⾔ (1)数组 (2)指针 指针变量 空指针 (3)指针复杂类型 int a 0; int *p &a; int p[3];​​​​​​​ int *p[3]; int (*p)[3]; int **p; int p(int); int(*p)(int); C语⾔ (1)数组 当数据具有相同的数据类型&#xff1b;使用过程中需要保留原始…

纯前端读写文件?

事情是这样的我发现vscode在线版居然可以打开文件目录和文件&#xff0c;还能保存文件。 兼容性一般 目前 谷歌 edge Opera 支持 其他均不支持 https://vscode.dev/ 查了一下MDN 发现增加新的API 了 https://developer.mozilla.org/zh-CN/docs/Web/API/Window/showDirectoryP…

2023-09-07 LeetCode每日一题(修车的最少时间)

2023-09-07每日一题 一、题目编号 2594. 修车的最少时间二、题目链接 点击跳转到题目位置 三、题目描述 给你一个整数数组 ranks &#xff0c;表示一些机械工的 能力值 。ranksi 是第 i 位机械工的能力值。能力值为 r 的机械工可以在 r * n2 分钟内修好 n 辆车。 同时给你…

Nginx 配置错误导致漏洞

文章目录 Nginx 配置错误导致漏洞1. 环境启动2. CRLF注入漏洞2.1 漏洞描述2.2 漏洞原理2.3 漏洞利用2.4 修复建议 3. 目录穿越漏洞3.1 漏洞描述3.2 漏洞原理3.3 漏洞利用3.4 修复建议 4. add_header被覆盖4.1 漏洞描述4.2 漏洞原理4.3 漏洞利用4.4 修复建议 Nginx 配置错误导致…

数据结构与算法:数据结构基础

目录 数组 定义 形式 顺序存储 基本操作 读取元素 更新元素 插入元素 删除元素 扩容 初始化 时机 步骤 优劣势 链表 定义 单向链表 特点 双向链表 随机存储 基本操作 查找节点 更新节点 插入节点 删除元素 数组VS链表 栈与队列 栈 定义 基本操作…

uniapp使用webview将页面转换成图片支持h5、app、小程序

uniapp使用webview将页面转换成图片支持h5、app、小程序 在uniapp项目中新建主页和webview页面 index.vue代码 <template><view><!-- 微信小程序要设置src为网络路径 --><web-view src"/hybrid/html/webview.html"></web-view><…

51单片机的智能台灯控制系统仿真( proteus仿真+程序+原理图+报告+讲解视频)

51单片机的红外光敏检测智能台灯控制系统仿真 1.主要功能&#xff1a;2.仿真3. 程序代码4. 原理图5. 设计报告6. 设计资料内容清单&&下载链接 51单片机的红外光敏检测智能台灯控制系统仿真( proteus仿真程序原理图报告讲解视频&#xff09; 仿真图proteus7.8及以上 程…

SpringMVC应用

文章目录 一、常用注解二、参数传递2.1 基础类型String2.2 复杂类型2.3 RequestParam2.4.路径传参 PathVariable2.4 Json数据传参 RequestBody2.5 RequestHeader 三、方法返回值3.1 void3.2 Stringmodel3.3 ModelAndView 一、常用注解 SpringMVC是一个基于Java的Web框架&#…

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

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

【小吉送书—第二期】阿里后端开发:抽象建模经典案例

文章目录 0.引言1.抽象思维2.软件世界中的抽象2.1 命名抽象2.2 分层抽象2.3 原则抽象 3. 经典抽象案例3.1 方案一&#xff1a;战术抽象&#xff0c;多快好省&#xff0c;跑步前进3.2 方案二&#xff1a;深入分析&#xff0c;透过表象&#xff0c;探寻本质 5. 推荐一本书&#x…

给 Ubuntu 操作系统配置静态 IP

针对 Ubuntu 22.04.3 操作系统的静态 IP 配置 一、查看初始的网络信息 查看网卡名称 ifconfig查看网关信息 route -n二、编辑网络配置文件 编辑文件&#xff0c;配置文件的名称可能不一样&#xff0c;自己去 /etc/netplan/ 目录查看 sudo vim /etc/netplan/01-network-manager-…

虚幻引擎集成web前端<一>:win环境UE4.27导出像素流并集成到vue2环境(附案例)

本案例附件&#xff1a;https://download.csdn.net/download/rexfow/88303544 第一部分&#xff1a;虚幻引擎导出像素流windows包 第1步&#xff1a;软件设置 -AudioMixer -PixelStreamingIPlocalhost -PixelStreamingPort8888 第2步&#xff1a;信令服务器设置 1、执行run_l…

WebSocket原理简介

慢聊Go之GoLang中使用Gorilla Websocket&#xff5c;Go主题月 - 掘金 (juejin.cn) 【Go项目】24. WebSocket 基本原理_哔哩哔哩_bilibili 1.http和socket的区别 1&#xff09; http要先给服务器发请求&#xff0c;然后才会得到响应&#xff0c;基本是一问一答式。 而socke…

DataX实现Mysql数据同步到ElasticSearch(ES)

Linux环境要求 jdk1.8及以上 python2 准备工作 Linux安装jdk yum install -y java-1.8.0-openjdk.x86_64查看是否安装成功 java -versionlinux安装python yum install -y python查看python版本号&#xff0c;判断是否安装成功 python --version下载DataX&#xff1a; Dat…