SpringMVC 有趣的文件

news2024/11/27 1:24:57

文章目录

  • SpringMVC 文件上传--文件下载-ResponseEntity<T>
    • 文件下载-ResponseEntity<T>
      • 案例演示
        • 代码应用
        • 小结
        • 完成测试(页面方式)
    • SpringMVC 文件上传
      • 基本介绍
      • 应用实例
        • 需求分析/图解
        • 代码实现
        • 完成测试( 页面方式)

SpringMVC 文件上传–文件下载-ResponseEntity

文件下载-ResponseEntity

在SpringMVC 中,通过返回ResponseEntity的类型,可以实现文件下载的功能。

案例演示

代码应用

修改json.jsp

<h1>发出一个json 数据</h1>
u:<input id="userName" type="text"><br/>
a:<input id="age" type="text"><br/>
<button name="butt1">添加用户</button>+
<h1>下载文件的测试</h1>
<a href="downFile">点击下载文件</a>

修改JsonHandler.java, 增加方法

 //响应用户下载文件的请求
    @RequestMapping(value = "/downFile")
    //public ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, HttpStatus status) {}
    //ResponseEntity类,扩展了HttpEntity类,新增了status成员变量,这样,一个ResponseEntity基本可以代表完整的http的请求或响应了
    //使用ResponseEntity作为controller的返回值,我们可以方便地处理响应的header,状态码以及body
    public ResponseEntity<byte[]> downFile(HttpSession session) throws Exception {
        //1. 先获取到下载文件的inputStream
        InputStream resourceAsStream =
                session.getServletContext().getResourceAsStream("/img/2.jpg");

        //2. 开辟一个存放文件的byte数组, 使用byte[] 因为可以支持二进制数据(图片,视频。)
        byte[] bytes = new byte[resourceAsStream.available()];
        //3. 将下载文件的数据,读入到byte[]
        resourceAsStream.read(bytes);

        //4. 创建返回的HttpStatus
        HttpStatus httpStatus = HttpStatus.OK;//返回成功
        //5. 创建 headers
        HttpHeaders headers = new HttpHeaders();
        //根据http 协议这个就是告诉浏览器,这是返回的一个文件,浏览器就弹出小窗口
        headers.add("Content-Disposition", "attachment;filename=2.jpg");

        //构建一个ResponseEntity 对象1. 的http响应头headers 2. http响应状态 3. 下载的文件数据
        ResponseEntity<byte[]> responseEntity =
                new ResponseEntity<>(bytes, headers, httpStatus);
        //如果出现找不到文件,解决方法 rebuild project -> 重启tomcat
        return responseEntity;
    }

小结

文件下载响应头的设置
1. content-type 指示响应内容的格式。
2. content-disposition 指示如何处理响应内容。

一般有两种方式:
1. inline:直接在页面显示。
2. attchment:以附件形式下载。

完成测试(页面方式)

浏览器输入: http://localhost:8080/springmvc/json.jsp

SpringMVC 文件上传

基本介绍

  1. Spring MVC 为文件上传提供了直接的支持, 这种支持是通过即插即用的MultipartResolver 实现的。Spring 用Jakarta Commons FileUpload 技术实现了一个MultipartResolver 实现类:CommonsMultipartResovler。
  2. Spring MVC 上下文中默认没有装配MultipartResovler,因此默认情况下不能处理文件的上传工作,如果想使用Spring 的文件上传功能,需现在上下文中配置MultipartResolver。

应用实例

需求分析/图解

代码实现

引入springmvc 文件上传需要的jar 包。

创建springmvc\web\fileUpload.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>文件上传</title>
</head>
<body>
<h1>文件上传的演示</h1>
<form action="<%=request.getContextPath()%>/fileUpload" method="post" enctype="multipart/form-data">
    文件介绍:<input type="text" name="introduce"><br>
    选择文件:<input type="file" name="file"><br>
    <input type="submit" value="上传文件">
</form>
</body>
</html>

配置中文过滤器,在web.xml, 使用Spring 提供的,前面我们配置过了。

配置文件上传解析器, 在springDispatcherServlet-servlet.xml

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

创建springmvc\src\com\web\fileupload\FileUploadHandler.java

@Controller
public class FileUploadHandler {
    //编写方法,处理文件上传的请求
    @RequestMapping(value = "/fileUpload")
    public String fileUpload(@RequestParam(value = "file") MultipartFile file,
                             HttpServletRequest request, String introduce) throws IOException {

        //接收到提交的文件名
        String originalFilename = file.getOriginalFilename();
        System.out.println("你上传的文件名= " + originalFilename);
        System.out.println("introduce=" + introduce);
        //得到要把上传文件保存到哪个路径[全路径:包括文件名]
        String fileFullPath =
                request.getServletContext().getRealPath("/img/" + originalFilename);
        //获取真正的工作路径,out目录
        //创建文件
        File saveToFile = new File(fileFullPath);
        //将上传的文件,转存到saveToFile
        file.transferTo(saveToFile);
        return "success";
    }
}

完成测试( 页面方式)

看文件是否成功上传, 浏览器:http://localhost:8080/springmvc/fileUpload.jsp



在这里插入图片描述

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

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

相关文章

13.3 【Linux】主机的细部权限规划:ACL 的使用

13.3.1 什么是 ACL 与如何支持启动 ACL ACL 是 Access Control List 的缩写&#xff0c;主要的目的是在提供传统的 owner,group,others 的read,write,execute 权限之外的细部权限设置。ACL 可以针对单一使用者&#xff0c;单一文件或目录来进行 r,w,x 的权限规范&#xff0c;对…

三层架构与MVC模式

MVC模式 MVC模式是软件工程中常见的一种软件架构模式&#xff0c;该模式把软件系统&#xff08;项目&#xff09;分为了三个基本部分&#xff1a;模型(Model)、视图(View)、控制器(Controller)。 视图(View) 负责界面的显示&#xff0c;以及与用户的交互功能&#xff0c;例如表…

【解析excel】利用easyexcel解析excel

【解析excel】利用easyexcel解析excel POM监听类工具类测试类部分测试结果备注其他 EasyExcel Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存&#xff0c;poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题&…

【代码随想录 | Leetcode | 第十一天】字符串 | 反转字符串 | 反转字符串 II | 替换空格 | 反转字符串中的单词 | 左旋转字符串

前言 欢迎来到小K的Leetcode|代码随想录|专题化专栏&#xff0c;今天将为大家带来字符串~反转字符串 | 反转字符串 II | 替换空格 | 反转字符串中的单词 | 左旋转字符串的分享✨ 目录 前言344. 反转字符串541. 反转字符串 II剑指 Offer 05. 替换空格151. 反转字符串中的单词剑…

Linux:centos7:zabbix4.0(安装,监控》Linux》Windows》网络设备)

环境 centos7&#xff08;zabbix服务器&#xff09;内网ip&#xff1a;192.168.254.11 外网ip&#xff1a;192.168.0.188&#xff08;去网络yum源下载&#xff09; centos7&#xff08;被监控端&#xff09;内网ip&#xff1a;192.168.254.33win10&#xff08;被监控端&…

怎么学习Java安全性和加密相关知识?

学习Java安全性和加密相关知识是非常重要的&#xff0c;特别是在开发涉及敏感数据的应用程序时。以下是学习Java安全性和加密的一些建议&#xff1a; 基础知识&#xff1a; 首先&#xff0c;了解计算机网络安全的基本概念&#xff0c;包括加密、解密、哈希算法、数字签名等。…

图书管理系统--进阶(动态开辟内存 + 保存数据到文件)

文章目录 动态开辟内存优化改进图书管理系统类型改进初始化图书管理系统的函数改进添加图书信息的函数增加销毁图书信息管理系统的函数 保存数据到文件优化保存图书信息管理系统数据到文件读取数据到图书信息管理系统 完整的代码展示 在 C语言实现图书管理系统的所有基本功能详…

当下哪些行业最容易被AI替代?

随着人工智能&#xff08;AI&#xff09;技术的不断发展&#xff0c;越来越多的行业受到AI的冲击。从工业制造到为人服务&#xff0c;在我们许多未察觉的领域&#xff0c;AI正在逐渐取代传统的人类劳动力。那么哪些行业最容易被AI替代呢&#xff1f; 一、制造业和生产线 制造业…

overflow-x:scroll不生效

父元素的宽度一定要设置,不要使用100%, 使用100%可能会导致父跟子元素的宽度一样, 从而无法滑动 父元素: overflow-x:scroll 根据gpt的答案:

Android 6.0 版本中插件化沙盒环境下IllegalArgumentException Unknown package异常

近期从bugly上发现某个渠道包报错 Unknown package异常问题&#xff0c;经过framework层源码分析&#xff0c;发现是插件化api兼容性问题,该渠道包是运行在沙盒环境(233乐园)。 现象 java 报错栈&#xff1a; 其他设备&#xff0c;次数信息&#xff1a;目前发生android 6.0系…

QT【day2】

完善登录框&#xff1a; //main头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include<QDebug> //信息调试类&#xff0c;用于打印输出 #include<QIcon> //图标头文件 #include<QPushButton> //按钮类头文件 #include…

Web_python_template_injection

考察模版Python flask的模版注入&#xff0c;页面没有回显&#xff0c;只有一段字符串&#xff0c;尝试直接利用Python传参 完全没回显 但是如果直接访问的话&#xff0c;就会利用url报错&#xff0c;将结果给执行带出来&#xff0c;那说明我就可以直接利用这个性质进行ssti模版…

SQL注入--题目

联合查询注入&#xff1a; bugku-这是一个神奇的登录框 手工注入&#xff1a; 点吧&#xff0c;输入0’发现还是&#xff1a; 输入0" 发现报错&#xff1a; 确定可以注入&#xff0c;判断字段有多少个 0"order by 1,2,3# 发现&#xff1a; 说明有两列。 输入 0&qu…

赞同高频接广?品牌复投成B站粉丝催更利器

一直以来&#xff0c;电商行业是B站公开的前五大广告主之一。今年618电商节期间B站发布数据称&#xff0c;B站电商类广告收入迎来爆发&#xff0c;同比增长超400%。其中&#xff0c;站内带货视频数量同比增长近8倍&#xff0c;带货直播场次同比增长近7.5倍。 B站作为中长视频为…

只需要5个技巧,就能让你的独立站更吸引客户

人类很简单——我们都更喜欢第一眼看起来令人心情愉悦的的东西。独立站卖家自由度更高&#xff0c;可以添加很多令人惊叹的产品、调整更优惠的价格并设置多种语言选择来吸引访问者购买&#xff0c;但网站的设计仍然是大多数访问者判断独立站品牌的第一要素。根据可靠调研得知&a…

Linux基础IO(二)

Linux基础IO(二) 文章目录 Linux基础IO(二)缓冲区为什么会有缓冲区缓冲区刷新策略系统有缓冲区吗&#xff1f; 文件系统什么是inode 软硬链接软链接硬链接热知识总结 文件的三个时间动静态库什么是动静态库怎么理解动静态库原理使用 制作一个库前置准备自制静态库使用自制的静态…

根据索引值计算item所在行列索引序号

getRowColIndex(itemIndex 0, colCount 3) {//必选参数&#xff1a;itemIndex是当前元素的索引值&#xff0c;从0开始计算&#xff08;如果是从1开始&#xff0c;则需将传入值-1&#xff0c;即itemIndex--&#xff09;//必选参数&#xff1a;colCount是每一行显示多少个元素r…

使用Anaconda创建虚拟环境并添加到Jupyter notebook内核

1.修改虚拟环境的存放位置&#xff08;可选&#xff09; Windows&#xff1a;打开文件C:\Users\DongZhaoCheng(对应到你本人的用户名)\.condarc,添加envs_dirs: [D:\003SoftDevTool\anaconda_env]&#xff08;对应到你自己执行的目录&#xff09;,保存退出 2.进入系统终端创建…

Windows 11隐藏功能大揭秘

Windows 11隐藏功能大揭秘&#xff01;你了解多少&#xff1f; 不知道你是否已经升级到了Windows 11系统&#xff1f;毕竟&#xff0c;这个备受期待的新系统已经发布有一段时间了&#xff0c;相信大多数用户都已经开始尝试使用微软的新系统了吧。但是&#xff0c;你真的熟悉它…

查看进程环境变量

1、Linux 每一个进程的环境变量存储在 /proc/$PID/environ 中。 而 PID 可用通过 ps / jps(java 进程) 等命令查看。 ps -ef | grep xxxjps文件 /proc/$PID/environ 变量以namevalue的形式描述。多个变量之间由 null&#xff08;‘\0’&#xff09;分隔&#xff0c;为了便于阅…