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

Spring Boot 实现文件上传和下载

文章目录

  • Spring Boot 实现文件上传和下载
    • 一、引言
    • 二、文件上传
      • 1、配置Spring Boot项目
      • 2、创建文件上传控制器
      • 3、配置文件上传大小限制
    • 三、文件下载
      • 1、创建文件下载控制器
    • 四、使用示例
      • 1、文件上传
      • 2、文件下载
    • 五、总结

Spring Boot 实现文件上传和下载

在这里插入图片描述

一、引言

在现代Web应用中,文件上传和下载是非常常见的功能。无论是用户上传头像、文档,还是下载资源文件,这些操作都需要后端提供支持。Spring Boot 作为目前最流行的Java框架之一,提供了简洁而强大的方式来实现文件的上传和下载功能。本文将详细介绍如何在Spring Boot中实现文件的上传和下载,并提供相应的代码示例。

二、文件上传

1、配置Spring Boot项目

首先,确保你的Spring Boot项目已经配置了spring-boot-starter-web依赖。这个依赖包含了Spring MVC,它是实现文件上传和下载的核心。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

2、创建文件上传控制器

接下来,我们需要创建一个控制器来处理文件上传的请求。Spring Boot 提供了MultipartFile类来处理上传的文件。

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

@RestController
public class FileUploadController {

    @PostMapping("/upload")
    public String handleFileUpload(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return "文件为空,请重新选择文件";
        }

        try {
            // 获取文件名
            String fileName = file.getOriginalFilename();
            // 设置文件存储路径
            String filePath = "/path/to/upload/" + fileName;
            // 将文件保存到指定路径
            file.transferTo(new File(filePath));
            return "文件上传成功: " + fileName;
        } catch (IOException e) {
            e.printStackTrace();
            return "文件上传失败";
        }
    }
}

在这个示例中,我们通过@RequestParam("file")注解来接收前端上传的文件,并将其保存到指定的路径中。

3、配置文件上传大小限制

默认情况下,Spring Boot 对上传文件的大小有限制。如果你需要上传大文件,可以在application.properties中配置以下属性:

spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

三、文件下载

1、创建文件下载控制器

文件下载的实现相对简单。我们可以通过HttpServletResponse将文件流写入响应中,从而实现文件下载。

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;

@RestController
public class FileDownloadController {

    @GetMapping("/download")
    public void downloadFile(@RequestParam("filename") String filename, HttpServletResponse response) {
        File file = new File("/path/to/upload/" + filename);
        if (file.exists()) {
            response.setContentType("application/octet-stream");
            response.setHeader("Content-Disposition", "attachment; filename=" + filename);
            byte[] buffer = new byte[1024];
            try (FileInputStream fis = new FileInputStream(file);
                 OutputStream os = response.getOutputStream()) {
                int len;
                while ((len = fis.read(buffer)) != -1) {
                    os.write(buffer, 0, len);
                }
                os.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            response.setStatus(HttpServletResponse.SC_NOT_FOUND);
        }
    }
}

在这个示例中,我们通过HttpServletResponse将文件流写入响应中,并设置响应头以触发文件下载。

四、使用示例

1、文件上传

你可以使用Postman或任何HTTP客户端工具来测试文件上传功能。发送一个POST请求到/upload接口,并在请求体中包含一个文件。

2、文件下载

对于文件下载,你可以直接在浏览器中访问/download?filename=yourfile.txt,浏览器会自动触发文件下载。

五、总结

通过本文的介绍,你已经学会了如何在Spring Boot中实现文件的上传和下载功能。文件上传通过MultipartFile类处理,而文件下载则通过HttpServletResponse实现。这些功能在大多数Web应用中都非常实用,希望本文能帮助你更好地理解和应用这些技术。


版权声明:本博客内容为原创,转载请保留原文链接及作者信息。

参考文章

  • Spring Boot File Upload Example
  • Spring Boot File Download Example

http://www.kler.cn/a/523554.html

相关文章:

  • Kubernetes 环境中的自动化运维实战指南
  • Maui学习笔记- SQLite简单使用案例02添加详情页
  • 四.3 Redis 五大数据类型/结构的详细说明/详细使用( hash 哈希表数据类型详解和使用)
  • 消息队列篇--通信协议篇--应用层协议和传输层协议理解
  • 第05章 11 动量剖面可视化代码一则
  • JavaScript正则表达式
  • 【Go语言圣经】第四节:复合数据类型
  • 8622 哈希查找
  • LabVIEW纤维集合体微电流测试仪
  • 子2023
  • Linux(19)——使用正则表达式匹配文本
  • Linux 下注册分析(2)
  • 第31章 测试驱动开发中的设计模式与重构解析(Python 版)
  • .net 如何处理网页的Json请求?
  • LLM评估优化与新技术创新综述
  • 基于STM32的数字多重仪表教学
  • 编程题-最长的回文子串(中等)
  • 一文讲解CMS收集器的垃圾收集过程
  • vue3阻止事件冒泡到父元素
  • FLTK - FLTK1.4.1 - demo - animgifimage-play
  • FLTK - FLTK1.4.1 - demo - animgifimage
  • 漂亮数 (线性筛+前缀和)
  • 【小白学AI系列】NLP 核心知识点(五)Transformer介绍
  • 99.19 金融难点通俗解释:营业总收入vs归母净利润vs扣非净利润
  • 新鲜速递:DeepSeek-R1开源大模型本地部署实战—Ollama + MaxKB 搭建RAG检索增强生成应用
  • 数论问题75