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日

相关文章

  • 一文吃透 Spring 中的 AOP 编程

    一文吃透 Spring 中的 AOP 编程 什么是 AOP AOP(Aspect Oriented Programming)即面向切面编程。与 OOP(面向对象编程)不同,AOP 不是关注代码的对象,而是关注在程序运行过程中“特定点”发生的一些处理。其主要作用是在不修改原有逻辑的情况下,对程序进行一些扩展操作,例如:日志记录、性能监控、事务管理等。 Spri…

    Java 2023年5月19日
    00
  • php UEditor百度编辑器安装与使用方法分享

    PHP UEditor百度编辑器安装与使用方法分享 什么是PHP UEditor百度编辑器? PHP UEditor百度编辑器是一个基于JavaScript的所见即所得富文本编辑器,能够在Web浏览器中编辑HTML文本和其他富媒体,如照片和视频。它是一个轻量级、高度定制的编辑器,非常适合PHP开发人员集成到他们的网站中。 安装PHP UEditor百度编辑器…

    Java 2023年6月15日
    00
  • 详解SpringBoot配置连接池

    Spring Boot是一个快速创建Web应用程序的框架,它提供了许多便捷的功能和工具,其中包括连接池。连接池是一种管理数据库连接的技术,它可以提高应用程序的性能和可伸缩性。下面是详解Spring Boot配置连接池的完整攻略: 添加依赖项 首先,我们需要在pom.xml文件中添加连接池依赖项。Spring Boot支持多种连接池,包括HikariCP、To…

    Java 2023年5月14日
    00
  • Struts2返回json格式数据代码实例

    Struts2是一个基于Java的web应用程序框架,除了可以返回网页,还可以返回XML、JSON等各种格式的数据。下面是关于Struts2返回json格式数据代码实例的完整攻略。 步骤1:在pom.xml文件中添加依赖项 在pom.xml文件中添加下面这个依赖项: <dependency> <groupId>com.fasterxm…

    Java 2023年5月20日
    00
  • Mybatis实现动态SQL编写的示例详解

    下面是针对“Mybatis实现动态SQL编写的示例详解”的完整攻略。 什么是动态SQL 动态SQL是一种可以根据条件生成不同SQL语句的技术,它可以在SQL运行时决定具体的SQL语句。Mybatis是一种支持动态SQL的持久层框架,可以通过动态SQL来实现不同场景下的复杂SQL语句。 Mybatis实现动态SQL的方式 Mybatis实现动态SQL主要有以下…

    Java 2023年5月19日
    00
  • Mybatis中返回Map的实现

    Sure! MyBatis支持返回Map类型的结果集,我们可以将查询结果映射到Map中,其中Map中的key对应结果集中的字段名,value对应该字段所对应的值。那么,如何在MyBatis中实现返回Map类型的结果集呢?下面是实现的完整攻略: SQL语句 我们需要编写SQL语句,并在查询中使用别名,来保证返回结果中的属性名和表的列名保持一致。例如,以下SQL…

    Java 2023年5月19日
    00
  • maven三个常用的插件使用介绍

    下面我就为您详细讲解“Maven 三个常用的插件使用介绍”的完整攻略,包括介绍、示例和操作流程,以及实际应用案例,希望能给您带来一些帮助。 什么是 Maven 插件? Maven 插件是一些可重用的代码块,可以在 Maven 构建过程中执行特定的任务或目标。Maven 有许多插件可用,而每个插件都提供了在 Maven 构建生命周期的不同阶段执行的一些目标。 …

    Java 2023年5月20日
    00
  • 老生常谈Java String字符串(必看篇)

    那么关于“老生常谈Java String字符串(必看篇)”的完整攻略,以下是我的详细讲解: 1. 字符串概述 在Java中,字符串是一个非常重要的数据类型。字符串是由字符组成的序列,可以包含字母、数字、符号和空格等。 在Java中,字符串是不可变的,这意味着一旦创建了一个字符串,就不能修改它的内容。 Java提供了String类来处理字符串。 在Java中,…

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