Spring Boot搭建文件上传服务的方法

yizhihongxing

下面是详细讲解“Spring Boot搭建文件上传服务的方法”的完整攻略。

1. 引入依赖

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

<!-- 文件上传依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-io</artifactId>
    <version>1.3.2</version>
</dependency>

2. 配置文件上传参数

在application.yml文件中添加如下配置:

spring:
  servlet:
    multipart:
      # 设定总上传数据的最大值,默认为1MB
      max-file-size: 50MB
      # 设定单个上传文件的最大值,默认为10KB
      max-request-size: 10MB
      # 设定上传时,文件的临时存放路径,默认为:java.io.tmpdir
      location: /tmp

3. 文件上传API接口

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

import javax.validation.constraints.NotNull;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.util.ResourceUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

@Controller
@Validated
public class FileController {
    private static final Logger LOGGER = LoggerFactory.getLogger(FileController.class);
    /**
     * 文件上传
     *
     * @param file 上传的文件对象
     * @return 文件上传的结果
     */
    @PostMapping(value = "/upload")
    public String upload(@NotNull(message = "文件不能为空") @RequestParam(value = "file") MultipartFile file) {
        LOGGER.info("start to upload file.");
        String format = DateFormatUtils.format(System.currentTimeMillis(), "yyyyMMddHHmmss");
        String fileUrl = null;
        try {
            //获取根目录
            File path = new File(ResourceUtils.getURL("classpath:").getPath());
            if (!path.exists()) {
                path = new File("");
            }
            File upload = new File(path.getAbsolutePath(), "static/upload/");
            LOGGER.info("upload path: {}", upload.getAbsolutePath());

            //生成文件名
            String originalFilename = file.getOriginalFilename();
            String fileSuffix = FilenameUtils.getExtension(originalFilename);
            String newFileName = format + "." + fileSuffix;

            //上传文件
            FileUtils.copyInputStreamToFile(file.getInputStream(), new File(upload, newFileName));
            fileUrl = "/upload/" + newFileName;
            LOGGER.info("upload success! fileUrl: {}", fileUrl);
        } catch (IOException e) {
            LOGGER.error("upload failed: {}", e.getMessage());
            return "failed";
        }
        return fileUrl;
    }
}

4. 文件上传页面

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>文件上传示例</title>
</head>
<body>
<h3>文件上传示例</h3>
<form action="/upload" method="post" enctype="multipart/form-data">
    <label for="file">选择文件:</label>
    <input type="file" id="file" name="file"/><br/><br/>
    <input type="submit" value="上传"/>
</form>
</body>
</html>

通过上述4个步骤,我们就可以在Spring Boot中搭建起一个文件上传的服务。

示例说明:

  1. 上传文件总大小为50MB,单个文件大小不超过10MB;
  2. 文件默认存储在服务器的/static/upload/路径下;
  3. 提供了一个文件上传的API接口,将上传结果返回到前端页面。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot搭建文件上传服务的方法 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 重启U盘的简便技巧不需要拔下重插

    以下是“重启U盘的简便技巧不需要拔下重插”的完整攻略: 标题 问题背景 在使用电脑时,我们常常需要使用U盘来传输和存储数据。但是,当我们需要重启电脑时,往往需要拔下U盘,然后再插回电脑才能继续使用。这样的操作很不方便,有没有什么办法可以快速重启U盘而不用拔下重插呢? 解决方法 其实,我们可以通过一些简单的操作来快速重启U盘。下面是具体步骤: 打开“设备管理器…

    other 2023年6月27日
    00
  • spring data jpa如何只查询实体部分字段

    当使用Spring Data JPA时,您可以使用Projection来仅查询实体部分字段。Projection允许您定义一个接口,该接口仅包含您想要选择的字段。下面是对如何使用Spring Data JPA来仅查询实体部分字段的完整攻略: 步骤1:创建Projection 创建一个Projection接口,该接口仅包含要选择的字段。例如,我们将创建一个名为…

    other 2023年6月25日
    00
  • 逆水寒下载完客户端出现问题怎么办 NGP客户端修复方法介绍

    逆水寒下载完客户端出现问题怎么办 问题描述 有玩家在下载逆水寒客户端后,出现了无法打开客户端的问题,怎么解决呢? 解决方法 事实上,逆水寒客户端打不开的原因有很多种,下面分别介绍几种可能的情况以及解决方法。 1. 客户端文件被修改 如果你在下载完逆水寒客户端后,修改了客户端文件,就可能会导致客户端无法打开的情况。如果这是你所遇到的问题,那么可以执行以下操作进…

    other 2023年6月25日
    00
  • 电脑硬件认识之什么是电脑的内存条[图文]

    电脑硬件认识之什么是电脑的内存条 什么是内存条? 内存条是电脑中的一种硬件设备,也被称为RAM(Random Access Memory,随机存取存储器)。它是用于临时存储和访问数据的地方,以供中央处理器(CPU)快速读取和写入。内存条的容量越大,电脑处理数据的能力就越强。 内存条的作用 内存条在电脑中扮演着重要的角色,它的作用包括: 临时存储数据:内存条用…

    other 2023年8月1日
    00
  • WPS for Linux(ubuntu)字体配置(字体缺失解决办法)

    WPS for Linux(ubuntu)字体配置(字体缺失解决办法) WPS是一款在Linux操作系统上的办公软件,其功能强大,广受欢迎。然而,由于版权等原因,WPS for Linux(ubuntu)在安装后常常出现字体缺失的问题。本文将为大家介绍在Linux(ubuntu)操作系统下配置WPS字体并解决字体缺失问题的具体办法。 确认字体缺失 在正式配置…

    其他 2023年3月28日
    00
  • Java是如何实现平台无关性的

    Java是如何实现平台无关性的 Java是一种高级编程语言,经过多年的发展,如今已经成为了全球最流行的编程语言之一。其中最为著名的特点就是平台无关性,也就是说,Java程序可以运行在任何支持Java虚拟机(JVM)的平台上,例如Windows、Linux和Mac OS等。 Java语言之所以能够实现平台无关性,是因为它的编译过程与其他语言有所不同。一般来说,…

    其他 2023年3月28日
    00
  • 使用华为云鲲鹏弹性云服务器部署Discuz的详细过程

    使用华为云鲲鹏弹性云服务器部署Discuz的过程可以分为以下几步: 创建鲲鹏弹性云服务器 配置服务器环境 安装与配置MySQL 下载与配置Discuz 安装与配置nginx 配置防火墙 下面详细介绍每一步的具体操作过程: 创建鲲鹏弹性云服务器 在华为云上创建鲲鹏弹性云服务器的过程可以参考官方文档:https://support.huaweicloud.com…

    other 2023年6月26日
    00
  • 删除电脑右键菜单中映射网络驱动器选项的方法

    删除电脑右键菜单中映射网络驱动器选项的方法 在 Windows 操作系统中,我们可以通过右键菜单来映射网络驱动器。然而,有时候这个选项并不常用,或者我们想要删除它,本文将为大家介绍删除电脑右键菜单中映射网络驱动器选项的方法。 步骤一:打开注册表编辑器 首先,我们需要打开注册表编辑器。按下快捷键 Win + R,输入 regedit,回车打开注册表编辑器。 步…

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