SpringBoot实现文件上传下载功能

简介: 本文介绍了如何使用SpringBoot实现文件上传与下载功能,涵盖配置和代码实现。包括Maven依赖配置(如`spring-boot-starter-web`和`spring-boot-starter-thymeleaf`)、前端HTML页面设计、WebConfig路径映射配置、YAML文件路径设置,以及核心的文件上传(通过`MultipartFile`处理)和下载(利用`ResponseEntity`返回文件流)功能的Java代码实现。文章由Colorful_WP撰写,内容详实,适合开发者学习参考。

SpringBoot实现文件上传下载功能

配置和前端页面

  • maven配置文件

xml

代码解读

复制代码

    <dependencies>
        <!--  web模块      -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--  thymeleaf 模板引擎      -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
    </dependencies>
  • 前端页面

html

代码解读

复制代码

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/jquery/3.5.0/jquery.js"></script>
</head>
<body>
<h3>文件上传</h3>
<!--文件上传要求form表单的请求方式必须为post,并且添加属性enctype="multipart/form-data"-->
<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file" >
    <br>
    <input type="submit" value="上传" >
</form>

[[${filename}]]

<br>
<!--渲染上传的图片-->
<img th:src="@{${filename}}" alt="图片" id="imgss">
<h3>文件下载</h3>
<form action="/download" method="get">
    <input type="hidden" name="imageName" id="imageName" th:value="${filename}"/>
    <input type = "submit"  value="点击图片下载" >
</form>
</body>
</html>
  • webconfig配置

java

代码解读

复制代码

@Configuration
public class MyWebAppConfigurer implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        
        //  用于前端匹配路径 /AAA-uploaded/** 的时候 可以直接定位到D://AAA-uploaded/图片存储的地址
        //  用于前端页面渲染图片
        registry.addResourceHandler("/AAA-uploaded/**").
                addResourceLocations("file:/" + "D://AAA-uploaded/");
    }
}
  • yaml配置文件

yaml

代码解读

复制代码

server:
  port: 8080

my-config:
  file-path: D:\

文件上传功能

MultipartFile接收前端传来的文件

java

代码解读

复制代码

@Value("${my-config.file-path}")
    private String myFilePath;

    @RequestMapping("upload")
    public String upload(@RequestParam("file") MultipartFile file, Model model) {
        try {
            //  避免图片名字重复 采用时间戳+图片名
            String fileName = System.currentTimeMillis() + file.getOriginalFilename();
            //  获取图片存放路径
            String destFileName = myFilePath + "AAA-uploaded" + File.separator + fileName;
            File destFile = new File(destFileName);
            //  判断上一级目录是否存在 不存在则创建
            if (!destFile.getParentFile().exists()) {
                destFile.getParentFile().mkdirs();
            }
            //  移动文件到指定目录下
            file.transferTo(destFile);
            //  存放到页面用于回显测试
            model.addAttribute("filename", "AAA-uploaded/" + fileName);
        } catch (Exception e) {
            e.printStackTrace();
            return "上传失败," + e.getMessage();
        }
        return "index";
    }

文件下载功能

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

java

代码解读

复制代码

@Value("${my-config.file-path}")
    private String myFilePath;
@ResponseBody
    @RequestMapping("/download")
    public ResponseEntity<byte[]> testResponseEntity(@RequestParam(value = "imageName", required = false) String 	filename) throws IOException {
        //  获取图片名称返回给页面用于下载
        String name = filename.split("/")[1];
        File newfile = new File("D:/AAA-uploaded" + File.separator + name);
        if (!newfile.exists()) {
            throw new IOException(name + "文件不存在");
        }
        //  创建输入流
        InputStream is = new FileInputStream(newfile);
        //  创建字节数组
        byte[] bytes = new byte[is.available()];
        //  将流读到字节数组中
        is.read(bytes);
        //  创建HttpHeaders对象设置响应头信息
        MultiValueMap<String, String> headers = new HttpHeaders();
        //  设置要下载方式以及下载文件的名字
        headers.add("Content-Disposition", "attachment;filename="+ name);
        //  设置响应状态码
        HttpStatus statusCode = HttpStatus.OK;
        //  创建ResponseEntity对象
        ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(bytes, headers, statusCode);
        //  关闭输入流
        is.close();
        return responseEntity;
    }


转载来源:https://juejin.cn/post/7173261648038379551

相关文章
|
5天前
|
安全 Java API
Spring Boot 功能模块全解析:构建现代Java应用的技术图谱
Spring Boot不是一个单一的工具,而是一个由众多功能模块组成的生态系统。这些模块可以根据应用需求灵活组合,构建从简单的REST API到复杂的微服务系统,再到现代的AI驱动应用。
113 7
|
1月前
|
SQL 前端开发 Java
深入理解 Spring Boot 项目中的分页与排序功能
本文深入讲解了在Spring Boot项目中实现分页与排序功能的完整流程。通过实际案例,从Service层接口设计到Mapper层SQL动态生成,再到Controller层参数传递及前端页面交互,逐一剖析每个环节的核心逻辑与实现细节。重点包括分页计算、排序参数校验、动态SQL处理以及前后端联动,确保数据展示高效且安全。适合希望掌握分页排序实现原理的开发者参考学习。
78 4
|
1月前
|
存储 Java 定位技术
SpringBoot整合高德地图完成天气预报功能
本文介绍了如何在SpringBoot项目中整合高德地图API实现天气预报功能。从创建SpringBoot项目、配置依赖和申请高德地图API开始,详细讲解了实体类设计、服务层实现(调用高德地图API获取实时与预报天气数据)、控制器层接口开发以及定时任务的设置。通过示例代码,展示了如何获取并处理天气数据,最终提供实时天气与未来几天天气预报的接口。文章还提供了测试方法及运行步骤,帮助开发者快速上手并扩展功能。
|
6月前
|
消息中间件 缓存 Java
手写模拟Spring Boot启动过程功能
【11月更文挑战第19天】Spring Boot自推出以来,因其简化了Spring应用的初始搭建和开发过程,迅速成为Java企业级应用开发的首选框架之一。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,帮助读者深入理解其工作机制。
88 3
|
18天前
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
100 1
|
26天前
|
前端开发 Java 关系型数据库
基于Java+Springboot+Vue开发的鲜花商城管理系统源码+运行
基于Java+Springboot+Vue开发的鲜花商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的鲜花商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。技术学习共同进步
119 7
|
19天前
|
供应链 JavaScript BI
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
这是一款专为小微企业打造的 SaaS ERP 管理系统,基于 SpringBoot+Vue+ElementUI+UniAPP 技术栈开发,帮助企业轻松上云。系统覆盖进销存、采购、销售、生产、财务、品质、OA 办公及 CRM 等核心功能,业务流程清晰且操作简便。支持二次开发与商用,提供自定义界面、审批流配置及灵活报表设计,助力企业高效管理与数字化转型。
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
|
4月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的留守儿童爱心网站设计与实现(计算机毕设项目实战+源码+文档)
博主是一位全网粉丝超过100万的CSDN特邀作者、博客专家,专注于Java、Python、PHP等技术领域。提供SpringBoot、Vue、HTML、Uniapp、PHP、Python、NodeJS、爬虫、数据可视化等技术服务,涵盖免费选题、功能设计、开题报告、论文辅导、答辩PPT等。系统采用SpringBoot后端框架和Vue前端框架,确保高效开发与良好用户体验。所有代码由博主亲自开发,并提供全程录音录屏讲解服务,保障学习效果。欢迎点赞、收藏、关注、评论,获取更多精品案例源码。
|
4月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的家政服务管理平台设计与实现(计算机毕设项目实战+源码+文档)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
4月前
|
JavaScript 搜索推荐 Java
基于SpringBoot+Vue实现的家乡特色推荐系统设计与实现(源码+文档+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!