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

springMVC-13 文件下载及上传

文件下载-ResponseEntity<T>

说明

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

核心代码:就是设置HttpHeader

文件下载响应头的设置

content-type                  指示响应内容的格式
content-disposition        指示如何处理响应内容

一般有两种方式:

content-disposition:inline                以内联形式,直接在页面显示
content-disposition:attchment         以附件形式,下载

应用实例

1.准备要下载的文件,复制到,web/directory/Deepseek.png

2.添加链接,web/json.jsp

<a href="<%=request.getContextPath()%>/json/download" >点击下载文件</a>

3.增加方法,com/stein/springMVC/json/handler/JsonHandler.java

@RequestMapping("/download")@ResponseBodypublic ResponseEntity<byte[]> downloadFile(HttpSession session) {//1.获取资源的输入流InputStream resourceAsStream = session.getServletContext().getResourceAsStream("/directory/Deepseek.png");//2.设置读取资源的内存大小byte[] bytes;try {bytes = new byte[resourceAsStream.available()];//3.将资源读取到内存中去resourceAsStream.read(bytes);} catch (IOException e) {throw new RuntimeException(e);}//4.提供构造器的参数public ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, HttpStatus status) {//bytes就是要传输的数据body//headers是传输报头HttpHeaders httpHeaders = new HttpHeaders();//设置传输内容,attachment表示以附件的形式进行下载,下载时的文件名我现在设置这个httpHeaders.add("Content-Disposition","attachment;filename=DeepseekCustom.jpg");//5.指定成功下载时的状态码HttpStatus httpStatus = HttpStatus.OK;//6.创建响应实体,并返回return new ResponseEntity<>(bytes, httpHeaders,HttpStatus.OK);}

4.测试。点击下载后,弹出另存为窗口

postman再测

因为postman没有解析jpg格式,所以显示的乱码。

文件上传

  • 基本介绍

1.Spring MVC为文件上传提供了直接的支持,这种支持是通过即插即用的MultipartResolver实现的。
Spring用Jakarta Commons FileUpload技术实现了一个MultipartResolver实现类:
CommonsMultipartResovler


2.Spring MVC上下文中默认没有装配MultipartResovler,因此默认情况下不能处理文件的上传工作,如果想使用Spring的文件上传功能,需现在上下文中配置MultipartResolver

  • 应用实例

1.引入jar包

2.创建web/upload.jsp

        enctype:encodetype编码类型默i认是application/x-www-urlencoded即url编码这种编码不适二进制文件数据的提交,一般是适用文本

        如果是要进行二进制文件的提交enctype要指定multipart/form-data表示表单提交的数据是有多个部分组成,也就是可以提交二进制数据和文本数据

    <h1>文件上传</h1><form action="<%=request.getContextPath()%>/upload" method="post" enctype="multipart/form-data">文件介绍:<input type="text" name="introduce"><br>选择文件:<input type="file" name="file"><br><input type="submit" value="提交"></form>

3.配置文件上传解析器,web/WEB-INF/springMVC-servlet.xml

    <bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>

4.创建com/stein/springMVC/upload/FileUploadHandler.java

@Controller
public class FileUploadHandler {@RequestMapping("/upload")public String upload(@RequestParam("file")MultipartFile file,//设定好与前端一直的名称后,后面这个变量名file就可以随便改了HttpServletRequest request,String introduce) throws IOException {String originalFilename = file.getOriginalFilename();System.out.println("上传文件的名字=" + originalFilename);System.out.println("introduce: " + introduce);//参数填什么?这儿是打算保存的路径,可以是根路径"/",也可以是全路径("/img/"+originalFilename)//要上传的文件保存的全路径String realPath = request.getServletContext().getRealPath("/");System.out.println("realPath = " + realPath);//上传文件的文件名。可以一步生成。// 注意:如果要创建img文件夹的话,要在web目录里面提前建好,同时检查out目录里面是否已经重构,否则上传会报错//String fileFullPath =request.getServletContext().getRealPath("/img/"+originalFilename);String fileFullPath = realPath + File.separator + originalFilename;System.out.println("fileFullPath = " + fileFullPath);File localFile = new File(fileFullPath);file.transferTo(localFile);return "success";}
}

5.测试

上传成功,success!

6.postman再测。成功!

http://www.xdnf.cn/news/14072.html

相关文章:

  • 英伟达诉求1亿IOPS SSD:打破AI算力存储瓶颈
  • 从技术视角解析星黎语音交互机器人的创新与行业影响
  • 分布式定时任务系列12:XXL-job的任务触发为什么是死循环?
  • IPv4详解
  • FWFW - Find Websites From World
  • Vue3中v-bind=“$attrs“用法讲解
  • el-table跨页多选和序号连续
  • Burn 开源程序是下一代深度学习框架,在灵活性、效率和可移植性方面毫不妥协
  • 使用Docker安装FFmpeg
  • 【Jmeter】Jmeter 高并发性能压力测试
  • 融智学教育观及其数学公式体系凝练汇总
  • 儿童智能玩具与传统玩具的区别
  • 倍思Nomos多合一桌面充:第六代氮化镓快充技术加持,性能全面提升
  • 【动手学深度学习】3.4. softmax回归
  • 鸿蒙开发-视频学习及实用中的一些小结
  • pytorch实战波斯顿房价回归模型
  • LINE 接入说明
  • 解决麒麟国产操作系统,分辨率下拉框是空白问题。
  • dsp28335
  • 洛谷自己创建的一个小比赛【c++】
  • 【win10神州网信政府版开启远程桌面服务mstsc 】
  • rk3568 , gt1x , 触摸的调试
  • Java Spring ApplicationEvent 概述
  • JavaScript数组方法总结
  • ShardingSphere实现分库分表
  • Vulkan学习笔记6—渲染呈现
  • 目前流行Agent框架对比表
  • Kubernetes安全机制深度解析(三):准入控制器
  • 解析OpenFOAM polymesh网格文件的C/C++程序实现
  • LangServe 完整使用指南:部署LangChain应用到生产环境