基于Spring6的文件上传与下载

server/2024/10/11 7:26:25/

基于Spring6的文件上传与下载

  • 1、文件上传
    • 1.1表单准备
      • web.xml中配置
    • 1.2 控制器代码
  • 2. 文件下载
    • 2.1 下载链接
    • 2.1 对应控制器

1、文件上传

从浏览器向客户端上传的过程

1.1表单准备

<form th:action="@{/fileup}" method="post" enctype="multipart/form-data">文件上传:<input type="file" name="fileName"><br><input type="submit" value="上传">
</form>
  1. POST请求
  2. 必须设置 表单属性enctype=“multipart/form-data” 默认是application/x-www-form-urlencoded

web.xml中配置

Spring6需要进行此配置


<servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup><multipart-config><!--设置单个支持最大文件的大小--><max-file-size>102400</max-file-size><!--设置整个表单所有文件上传的最大值--><max-request-size>1024000</max-request-size><!--设置最小上传文件大小--><file-size-threshold>0</file-size-threshold></multipart-config></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping>

1.2 控制器代码

java">  @PostMapping("/fileup")@ResponseBodypublic String fileUp(@RequestParam("fileName") MultipartFile multipartFile,HttpServletRequest request) throws IOException {String name = multipartFile.getName();  // 获取的是参数的名字 fileNameString originalFilename = multipartFile.getOriginalFilename();  // 获取的是文件真实的名字// 输入流InputStream in = multipartFile.getInputStream();    // 输入流,负责读客服端的文件BufferedInputStream bis = new BufferedInputStream(in);// 输出流ServletContext application = request.getServletContext();String realPath = application.getRealPath("/upload");File file = new File(realPath);System.out.println(realPath);if (!file.exists()){file.mkdirs();}File destFile = new File(file.getAbsolutePath() + "/" + UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf(".")));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));// 一边读一边写byte [] bytes = new byte[1024 * 10];int readCount = 0;while ((readCount = bis.read(bytes)) != -1){bos.write(bytes,0,readCount);}bos.flush();bos.close();bis.close();}

2. 文件下载

2.1 下载链接

<a th:href="@{/download}">文件下载</a>

2.1 对应控制器

java">
@GetMapping("/download")
public ResponseEntity<byte[]> downloadFile(HttpServletResponse response, HttpServletRequest request) throws IOException {File file = new File(request.getServletContext().getRealPath("/upload") + "/avatar2.jpg");// 创建响应头对象HttpHeaders headers = new HttpHeaders();// 设置响应内容类型headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);// 设置下载文件的名称headers.setContentDispositionFormData("attachment", file.getName());// 下载文件ResponseEntity<byte[]> entity = new ResponseEntity<byte[]>(Files.readAllBytes(file.toPath()), headers, HttpStatus.OK);return entity;
}

http://www.ppmy.cn/server/9094.html

相关文章

使用Scrapy选择器提取豆瓣电影信息,并用正则表达式从介绍详情中获取指定信息

本文同步更新于博主个人博客&#xff1a;blog.buzzchat.top 一、Scrapy框架 1. 介绍 在当今数字化的时代&#xff0c;数据是一种宝贵的资源&#xff0c;而网络爬虫&#xff08;Web Scraping&#xff09;则是获取网络数据的重要工具之一。而在 Python 生态系统中&#xff0c;S…

【随笔】Git 高级篇 -- 远程服务器拒绝 git push reset(三十二)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

笔记本电脑坏了硬盘数据会丢失吗 笔记本电脑坏了如何取出硬盘的资料 数据恢复软件

笔记本电脑对我们真的非常重要了&#xff0c;是实现无纸化办公和学习的重要工具&#xff0c;但是如果笔记本电脑坏了我们存储在电脑里的资料该怎么办&#xff1f;笔记本电脑坏了硬盘数据会丢失吗&#xff1f;相信有许多朋友都会有这样的担忧。本文今天就为大家解决笔记本电脑坏…

排序算法-常见

排序 冒泡排序 优缺点、复杂度 稳定&#xff0c;平均/最坏时间复杂度 O(n)&#xff0c;元素基本有序时最好时间复杂度 O(n)&#xff0c;空间复杂度 O(1)步骤 从头开始&#xff0c;依次比较数组中相邻的2个元素&#xff0c;如果前面的数比后面的数大&#xff0c;则交换位置每进…

每日三个JAVA经典面试题(四十)

1.如何使用设计模式来提高数据库操作的性能&#xff1f; 设计模式可以在数据库操作中提高性能&#xff0c;尤其是在应用程序需要频繁访问数据库时。以下是一些设计模式和技术&#xff0c;可以帮助提高数据库操作的性能&#xff1a; 数据访问对象模式&#xff08;DAO模式&#…

【BEVHeight论文阅读】自动驾驶车路协同车端感知算法

论文名称&#xff1a;BEVHeight: A Robust Framework for Vision-based Roadside 3D Object Detection 论文地址&#xff1a;https://arxiv.org/pdf/2303.08498.pdf 代码地址&#xff1a;https://github.com/ADLab-AutoDrive/BEVHeight 总结&#xff1a;这篇文章比较有意思的点…

解决Git 不相关的分支合并

可以直接调到解决方案,接下来是原因分析和每步的解决方式 问题原因: 我之前在自己本机创建了一个初始化了Git仓库,后来有在另一个电脑初始化仓库,并没有clone自己在本机Git远程仓库地址,导致Git历史版本不相关 错误信息 From https://gitee.com/to-uphold-justice-for-other…

极客智能直播机推出阿里国际站AI直播助手,让商家轻松开启全球直播带货!

导语&#xff1a;极客智能直播机近期推出了一款专门为阿里国际站商家直播赋能的AI直播助手&#xff0c;旨在帮助阿里巴巴国际站商家轻松开启全球直播带货&#xff0c;实现高效营销。本文将为您详细介绍这款产品的功能、优势以及如何轻松上手&#xff0c;最后邀请您参与讨论&…