Spring Boot 文件上传与下载的示例代码

下面是 “Spring Boot 文件上传与下载的示例代码”的完整攻略,包含了两条示例。

Spring Boot 文件上传与下载的示例代码

文件上传

1. 准备工作

在pom.xml中添加依赖:

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

2. 创建上传文件的controller

在controller中添加@RequestMapping("/upload")控制器映射

@RestController
@RequestMapping("/upload")
public class UploadController {

    @Value("${file.upload-dir}")
    private String uploadDir;

    @PostMapping("/file")
    public String uploadFile(@RequestParam("file") MultipartFile file) {
        if(file.isEmpty()) {
            return "上传文件为空";
        }

        String fileName = file.getOriginalFilename();
        String filePath = uploadDir + fileName;
        File dest = new File(filePath);

        try {
            file.transferTo(dest);
            return "上传成功";
        } catch (IOException e) {
            e.printStackTrace();
        }

        return "上传失败";
    }

}

3. 创建上传文件的配置类

配置上传文件的路径,使用@Value("${file.upload-dir}")获取配置文件中的值。

@Configuration
public class FileUploadConfig {

    // 上传文件保存路径,从application.yml中读取
    @Value("${file.upload-dir}")
    private String uploadDir;

    @Bean
    public ServletRegistrationBean dispatcherServlet() {
        ServletRegistrationBean registration = new ServletRegistrationBean(
                new DispatcherServlet(), "/");
        registration.setMultipartConfig(getMultipartConfigElement());
        return registration;
    }

    // 设置上传文件的缓存大小和临时路径
    private MultipartConfigElement getMultipartConfigElement() {
        MultipartConfigElement multipartConfig = new MultipartConfigElement(
                uploadDir, MAX_FILE_SIZE, MAX_REQUEST_SIZE, FILE_SIZE_THRESHOLD);
        return multipartConfig;
    }

}

文件下载

1. 创建下载文件的controller

在controller中添加@RequestMapping("/download")控制器映射

@RestController
@RequestMapping("/download")
public class DownloadController {

    @Value("${file.upload-dir}")
    private String uploadDir;

    @GetMapping("/file")
    public ResponseEntity<byte[]> downloadFile(@RequestParam("filename") String fileName) throws IOException {
        String filePath = uploadDir + fileName;

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        headers.setContentDispositionFormData("attachment",fileName);

        Path path = Paths.get(filePath);
        byte[] bytes = Files.readAllBytes(path);

        return new ResponseEntity<>(bytes, headers, HttpStatus.OK);
    }

}

2. 添加文件上传路径的配置

file:
  upload-dir: D:/file-upload/

示例

示例1:上传文件

请求URL:http://localhost:8080/upload/file

请求方式:POST

参数:file(上传文件)

响应示例:

上传成功

示例2:下载文件

请求URL:http://localhost:8080/download/file?filename=test.jpg

请求方式:GET

响应示例:以文件形式下载文件。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot 文件上传与下载的示例代码 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 解析分别用递归与循环的方式求斐波那契数列的实现方法

    解析分别用递归与循环的方式求斐波那契数列的实现方法 本篇攻略将会讲解如何用递归与循环两种方式来实现斐波那契数列的求值。其中,递归方式更加简洁易懂,但在大量计算时效率较低;而循环方式则可以提高速度,但相对复杂一些。 递归方式 递归方式求斐波那契数列的核心代码如下: def fibonacci_recursive(n): if n <= 1: return…

    Java 2023年5月26日
    00
  • java中的静态代码块、构造代码块、构造方法详解

    Java中的静态代码块、构造代码块、构造方法详解 在Java中,我们可以通过概念上三种不同类型的代码块来实现特定的代码块执行顺序和实现方式:静态代码块、构造代码块、构造方法。下面将针对这三种代码块进行详细讲解。 静态代码块 静态代码块是在类加载的时候自动执行的代码块,且只会执行一次。我们可以通过static {…}的方式定义静态代码块。静态代码块的主要作…

    Java 2023年5月23日
    00
  • Struts2学习笔记(8)-Result常用类型

    Struts2学习笔记(8)-Result常用类型 在Struts2中,Result是一个非常重要的概念,它决定了Action执行后的返回结果。Result类型决定了如何将Action返回的数据进行渲染。 在本篇笔记中,我们将介绍Struts2中常用的几种Result类型,并讲解它们的使用方法和示例。 1. Forward Result Forward Re…

    Java 2023年5月20日
    00
  • SpringBoot整合Shiro和Redis的示例代码

    下面我将为你详细讲解“SpringBoot整合Shiro和Redis的示例代码”的具体过程,包含示例代码说明。 一、引入相关依赖 首先需要在 pom.xml 文件中引入相关依赖,包括 SpringBoot、Shiro 和 Redis 的依赖,示例代码如下: <dependencies> <!– SpringBoot 依赖 –> &…

    Java 2023年6月15日
    00
  • Java_Spring之Spring5 的新特性

    Java Spring之Spring5 的新特性 简介 Spring是一个著名的开源框架,它旨在简化企业级应用程序的开发。Spring5是Spring框架的最新版本,它引入了许多新的功能和改进,以使应用程序的开发和管理更加容易。本文将介绍一些Spring5的新特性,帮助您更好地了解Spring5的能力。 Spring5的新特性 1. 支持Java8 Spri…

    Java 2023年5月31日
    00
  • Java如何使用Set接口存储没有重复元素的数组

    首先,Set接口是Java中的一个集合接口,它继承自Collection接口,而不同于Collection接口,Set接口中的元素是不允许重复的,因为Set中的数据结构一般是使用哈希表来实现的,哈希表的特性就是保证元素的唯一性。 以下是Java如何使用Set接口存储没有重复元素的数组的完整攻略: 创建Set对象 我们可以使用Java中的HashSet类来创建…

    Java 2023年5月26日
    00
  • 最简单的java生成word文档方法

    生成 Word 文档是 Java 应用中常见的需求之一,下面是一份最简单的 Java 生成 Word 文档方法攻略,包含以下内容: 使用的工具 – Apache POI 生成 Word 文档的步骤 示例 1:创建一个空的 Word 文档 示例 2:向 Word 文档中添加文本和表格 使用的工具 – Apache POI Apache POI 是一个 Java…

    Java 2023年5月20日
    00
  • Android应用中使用TabHost组件继承TabActivity的布局方法

    使用TabHost组件继承TabActivity的布局方法可以让我们在Android应用中快速实现底部切换页面的功能。下面我将详细讲解完整攻略。 准备工作 在使用TabHost组件之前,需要先引入相应的库。在build.gradle文件中添加以下依赖: dependencies{ implementation ‘com.android.support:app…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部