(续)SSM整合之springmvc笔记(文件上传和下载)(P159-163)

news2024/11/17 19:43:45

一 .文件下载

ResponseEntity用于控制器方法的返回值类型,该控制器方法的返回值就是响应到浏览器的响应报文

使用 ResponseEntity 实现下载文件的功能

1. 搞一张图片

 2. index.html

 <a th:href="@{/test/down}">下载图片</a>

3 .创建控制器FileUpAndDownController

 @RequestMapping("/test/down")
    public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOException {
        //获取ServletContext对象
        ServletContext servletContext = session.getServletContext();
        //获取服务器中文件的真实路径
        String realPath = servletContext.getRealPath("img");
        realPath = realPath + File.separator + "1.jpg";
        //创建输入流
        InputStream is = new FileInputStream(realPath);
        //创建字节数组,is.available()获取输入流所对应文件的字节数
        byte[] bytes = new byte[is.available()];
        //将流读到字节数组中
        is.read(bytes);
        //创建HttpHeaders对象设置响应头信息
        MultiValueMap<String, String> headers = new HttpHeaders();
        //设置要下载方式以及下载文件的名字
        headers.add("Content-Disposition", "attachment;filename=1.jpg");
        //设置响应状态码
        HttpStatus statusCode = HttpStatus.OK;
        //创建ResponseEntity对象
        ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(bytes, headers, statusCode);
        //关闭输入流
        is.close();
        return responseEntity;
    }

二 .文件上传

1. index.html


    <form th:action="@{/test/up}" method="post" enctype="multipart/form-data">
        头像:<input type="file" name="photo"><br>
        <input type="submit" value="上传">
    </form>

2 .创建控制器FileUpAndDownController

 @RequestMapping("/test/up")
    public String testUp(MultipartFile photo, HttpSession session) throws IOException {
        //获取上传的文件的文件名
        String fileName = photo.getOriginalFilename();
        //获取上传的文件的后缀名
        String hzName = fileName.substring(fileName.lastIndexOf("."));
        //获取uuid
        String uuid = UUID.randomUUID().toString();
        //拼接一个新的文件名
        fileName = uuid + hzName;
        //获取ServletContext对象
        ServletContext servletContext = session.getServletContext();
        //获取当前工程下photo目录的真实路径
        String photoPath = servletContext.getRealPath("photo");
        //创建photoPath所对应的File对象
        File file = new File(photoPath);
        //判断file所对应目录是否存在
        if(!file.exists()){
            file.mkdir();
        }
        String finalPath = photoPath + File.separator + fileName;
        //上传文件
        photo.transferTo(new File(finalPath));
        return "success";
    }

3. spring.xml 里面配置文件上传解析器

 <!--配置文件上传解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

4 .添加依赖

<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
</dependency>

总结:

* 文件上传的要求:
* 1、form表单的请求方式必须为post
* 2、form表单必须设置属性enctype="multipart/form-data"

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

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

相关文章

日本知名汽车零部件公司巡礼株式会社115

株式会社115 业务内容&#xff1a; 拖车用辅助脚、拖车用零件类、特殊车辆用车轴Sub。Assy产品、面向汽车产业的生产设备、面向建设机械的零部件类、面向汽车产业的检查夹具 公司简介&#xff1a; 董事长&#xff1a;佐藤安弘 资本金&#xff1a;4500万日元 员工数&#x…

在线研讨会 | 多说话人语音融合 - NVIDIA NeMo 代码解析

多说话人语音融合 - NVIDIA NeMo 代码解析 多说话人语音融合任务是 TTS 语音合成当中的一个子任务&#xff0c;它是指将两个或者多个说话人的声音进行融合&#xff0c;合成出新的语音的过程&#xff0c;而不需要做任何进一步的微调。多说话人语音融合可以通过插值的方式代替预…

线程创建方式

Thread&#xff1a;线程 创建方式&#xff1a; 方法一&#xff1a;继承Thread类 1. 继承 Thread 来创建一个线程类 2. 创建 MyThread 类的实例 3. 调用 start 方法启动线程 方法2 实现 Runnable 接口 1. 实现 Runnable 接口 2. 创建 Thread 类实例, 调用 Thread 的构造方…

ELK企业级日志分析系统

一 ELK ELK平台是一套完整的日志集中处理解决方案&#xff0c;将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用&#xff0c; 完成更强大的用户对日志的查询、排序、统计需求。 1 ELK各组件概念 ElasticSearch&#xff1a; 是基于Lucene&#xff08;一个全文检索…

X11 Xlib截屏问题及深入分析一 —— 源码位置

在使用类Ubuntu操作系统进行截屏时&#xff0c;发现屏幕有时不能正确截取&#xff0c;于是这才有了这段时间的Spetacle、Flameshot、X11 Xlib的系列文章。最后不使用Qt、直接使用X11 Xlib进行截屏仍然存在同样问题。这就需要深入对于代码进行分析了。再次列出源码如下&#xff…

[附源码]SSM计算机毕业设计高校创新创业服务平台JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

CAD数据文件格式DXF部分实体(圆弧、椭圆、凸度)解析[原理讲解+公式推导+java实现]

文章目录CAD图像读取与显示说明官方实体说明实体圆弧dxf记录信息代码实现测试优化多段线的凸度dxf记录信息代码实现测试椭圆dxf记录信息代码实现测试引用图片引用文章引用CAD图像读取与显示说明 如果想要开发一个可以读取dxf图像的软件&#xff0c;为了方便图像在软件中的绘制&…

优秀开源项目解读(六

一、Piggy Metrics介绍 PiggyMetrics是一个模拟的个人记账理财的应用&#xff0c;原作者称其为一个端到端的微服务PoC(Proof of Concept)&#xff0c;也就是说他开发这个是为了验证微服务架构和Spring Cloud技术栈。PiggyMetrics目前在github上有超过12k星&#xff0c;是学习微…

安卓讲课笔记5.6 列表视图

文章目录零、本讲学习目标一、导入新课二、新课讲解&#xff08;一&#xff09;列表视图概述1、继承关系图2、列表视图API文档3、列表视图四要素4、四种常用适配器&#xff08;二&#xff09;数组适配器1、数组适配器API文档2、数据适配器继承关系图3、数组适配器构造方法&…

第3章 定义内存缓存和log4net日志中间件

006 ICaching、MemoryCaching、SqlSugarMemoryCacheService 、MemoryCacheSetup Icaching&#xff1a;继承该接口的具体实现类&#xff0c;用于把内存缓存中间件实例注入到内置容器中&#xff0c;为实体实例的缓存数据交互操作提供内存管理操作支撑。 MemoryCaching&#xff1a…

了解Redis之命令操作

目录 1、Redis简介 2、Redis安装 2.1解压redis 2.2.安装gcc 2.3.编译redis 2.4.检测安装情况 2.5.修改redis.conf文件 2.6启动redis 2.7.测试redis启动是否成功 3、Redis命令 3.1.String 3.2.Hash 3.3.List 3.4.set 1、Redis简介 Redis是一个开源&#xff08;BSD许可…

第二次上机作业 大连理工大学

某百货公司6月份各天的销售数据如下:【数据】 x = c(257,276,301,252,238,310,246,236,265,278,271,292,261,281,301,274,267,280,291,258,272,284,268,303,273,263,301,249,269,295)计算该百货公司日销售额的中位数、四分位数和众数 median(x)# 中位数 quantile(x) # 四分位…

详解TCP为什么不能是两次握手

三次握手的过程 注意不要遗漏全双工下两缓存&#xff08;读/写缓存&#xff09;的分配和变量的分配。 CLOSED&#xff1a;表示初始状态。 LISTEN&#xff1a;该状态表示服务器端的某个SOCKET处于监听状态&#xff0c;可以接受连接。 SYN_SENT&#xff1a;这个状态与SYN_RCVD遥…

极限学习机和自适应稀疏表示算法 (EA-SRC)(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

梦开始的地方—— C语言动态内存管理(malloc+calloc+realloc+free)

文章目录动态内存管理1.为什么需要动态内存分配&#xff1f;2. 动态内存函数malloc&freecallocrealloc3. 常见的动态内存错误对NULL解引用对动态开辟空间的越界访问对非动态开辟内存使用free释放使用free释放一块动态开辟内存的一部分对同一块动态内存多次释放动态开辟内存…

Vue实现模糊查询:filter()

需求&#xff1a;在输入框里输入内容&#xff0c;包含相关内容的值被筛选出来&#xff1b; 图示&#xff1a; 最初的代码&#xff1a; <body><div id"box"><input type"text" input"handleInput()" v-model"mytext"&…

计算机网络 - 网络层 选择填空判断复习题

一. 单选题&#xff08;共25题&#xff0c;80分&#xff09; (单选题) 以下( )协议完成了从网卡到IP地址的映射。 A A.ARP协议 B.RARP协议 C.IGMP协议 D.ICMP协议 (单选题) 一个C类地址,采用了255.255.255.240作为子网掩码,那么这个C类地址可以划分为( )个子网。 A A.16 B.32 …

零基础自学javase黑马课程第十四天

零基础自学javase黑马课程第十四天 ✨欢迎关注&#x1f5b1;点赞&#x1f380;收藏⭐留言✒ &#x1f52e;本文由京与旧铺原创&#xff0c;csdn首发&#xff01; &#x1f618;系列专栏&#xff1a;java学习 &#x1f4bb;首发时间&#xff1a;&#x1f39e;2022年11月21日&…

【Hack The Box】Linux练习-- FriendZone

HTB 学习笔记 【Hack The Box】Linux练习-- FriendZone &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月17日&#x1f334; &#…

秋招失足,拿到这份“Java 高分指南(25 专题)”,金三银四翻盘有望

面试造火箭&#xff0c;工作拧螺丝&#xff01;金九银十灰溜溜地落榜&#xff0c;备受打击。正当准备明年金三银四之际&#xff0c;意外喜提朋友赠送的这“Java 高分指南&#xff08;25 专题&#xff09;”&#xff1a;Elasticsearch、微服务、Linux、JavaOOP、集合/泛型、Mysq…