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

下面是详细讲解“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接口,将上传结果返回到前端页面。
阅读剩余 65%

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

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

相关文章

  • mybatis 实现字段大小写赋值

    MyBatis 实现字段大小写赋值攻略 在 MyBatis 中,实现字段大小写赋值可以通过以下步骤完成: 步骤一:配置 MyBatis XML 文件 首先,在 MyBatis 的 XML 配置文件中,需要添加以下配置项: <configuration> <settings> <setting name=\"mapUnd…

    other 2023年8月18日
    00
  • Ubuntu中类似QQ截图的截图工具并实现鼠标右键菜单截图

    下面是关于在Ubuntu中使用类似QQ截图的截图工具并实现鼠标右键菜单截图的完整攻略,包括安装、配置和两个示例说明。 安装 在Ubuntu中,可以使用以下命令安装类似QQ截图的截图工具: sudo apt-get install flameshot 安装完成后,可以在应用程序菜单中找到Flameshot截图工具。 配置 为了实现鼠标右键菜单截图,需要进行以下…

    other 2023年5月6日
    00
  • 跟我学Makefile(二)

    跟我学Makefile(二) 在上一篇跟我学Makefile中,我们学习了一些基础的Makefile语法和命令。在本文中,我们将继续深入了解如何使用Makefile自动化构建我们的代码。 变量 Makefile支持定义变量,可以提高代码的复用性和可维护性。变量可以用于定义命令、文件列表等。 变量的定义格式是变量名 = 值。例如: CC = gcc CFLAG…

    其他 2023年3月28日
    00
  • 基于Qt实现可拖动自定义控件

    下面是基于Qt实现可拖动自定义控件的完整攻略。 1. 编写自定义控件 首先,我们需要编写自定义控件,这个控件可以是任何类型的Qt控件,比如QWidget或QLabel等。下面以QWidget为例,代码如下: class MyWidget : public QWidget { public: MyWidget(QWidget *parent = nullptr…

    other 2023年6月26日
    00
  • win10预览版怎么安装?win10预览版下载地址

    Win10预览版安装攻略 Win10预览版是微软提供给用户提前体验最新功能和改进的版本。以下是安装Win10预览版的详细攻略,包括下载地址和示例说明。 步骤一:下载Win10预览版 首先,你需要下载Win10预览版的安装文件。微软官方提供了下载页面,你可以在以下地址找到最新的预览版下载链接: Win10预览版下载地址 步骤二:选择适合的版本 在下载页面上,你…

    other 2023年8月4日
    00
  • 解决intellijidea下修改jsp页面不自动更新

    在使用IntelliJ IDEA开发Java Web项目时,有时候修改JSP页面后,页面不会自动更新,需要手动刷新浏览器才能看到修改后的效果。以下是解决IntelliJ IDEA下修改JSP页面不自动更新的完整攻略: 修改IntelliJ IDEA配置 可以通过修改IntelliJ IDEA配置,使其在修改JSP页面后自动更新。以下是一个示例,演示如何修改I…

    other 2023年5月7日
    00
  • Golang语言的多种变量声明方式与使用场景详解

    Golang语言的多种变量声明方式与使用场景详解 在Golang中,我们可以使用多种方式来声明和使用变量。这些不同的方式适用于不同的场景,可以根据需求选择最合适的方式来声明变量。 1. var关键字声明变量 使用var关键字可以声明一个或多个变量。这种方式适用于需要在函数内部或全局范围内声明变量的情况。 func main() { var name stri…

    other 2023年7月29日
    00
  • java防盗链在报表中的应用实例(推荐)

    介绍 Java防盗链是一种防止他人通过恶意手段访问你的网站资源的技术。在报表中的应用实例中,Java防盗链可以保护报表数据和图表资源,确保只有有访问权限的用户才能访问相关数据和图表资源,起到保护数据安全的作用。 实现方法 首先,我们需要在Java中开发一个防盗链的Servlet,以此来处理请求。我们可以在Servlet中判断请求头Referer,如果Refe…

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