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接口,将上传结果返回到前端页面。

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

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

相关文章

  • 小程序组件之自定义顶部导航实例

    小程序组件之自定义顶部导航实例 概述 在小程序中,我们可以通过wx.showNavigationBarLoading()和wx.hideNavigationBarLoading()等系列API来控制顶部导航条的显示和隐藏,但是如果希望自定义顶部导航,那么可以使用wx.setNavigationBarColor()API来设置顶部导航的颜色、背景色和文字内容等…

    other 2023年6月25日
    00
  • bat命令批处理判断32位还是64位系统的多种方法

    当使用批处理脚本编写时,可以使用多种方法来判断操作系统是32位还是64位。下面是一些常用的方法: 方法一:使用%PROCESSOR_ARCHITECTURE%环境变量 在Windows操作系统中,可以使用%PROCESSOR_ARCHITECTURE%环境变量来判断系统的位数。该环境变量的值为x86表示32位系统,值为AMD64表示64位系统。 以下是一个示…

    other 2023年7月28日
    00
  • vue中使用elementui实现树组件tree右键增删改功能

    Vue中使用ElementUI实现树组件Tree右键增删改功能,需要以下步骤: 安装ElementUI 在项目中使用ElementUI,需要先安装ElementUI库。可以使用npm安装,具体命令为: npm install element-ui –save 引入ElementUI 在Vue项目中引入ElementUI,需要在main.js中加入以下代码:…

    other 2023年6月27日
    00
  • 2016版三星Galaxy A5怎么样?三星全新Galaxy A5 2016版全方位评测

    2016版三星Galaxy A5评测攻略 1. 设计和外观 2016版三星Galaxy A5采用了金属和玻璃的组合设计,给人一种高端的感觉。其机身边框采用了金属材质,背部则是玻璃材质,整体手感舒适。此外,该手机还具有较窄的边框设计,使屏幕占比更高,提供更好的视觉体验。 示例说明1:金属边框的设计使得手机更加坚固耐用,能够有效抵抗日常使用中的碰撞和摔落。 示例…

    other 2023年9月6日
    00
  • 关于java:无法初始化cipher.init()

    以下是关于“关于Java:无法初始化Cipher.init()”的完整攻略,包含两个示例说明。 关于Java:无法初始化Cipher.init() 在Java中,我们可以使用Cipher类来进行加密和解密操作。在使用Cipher类时,有时会遇到“无法初始化Cipher.init()”的错误。在本攻略中,我们将介绍可能导致此错误的原因以及如何解决它。 1. 密…

    other 2023年5月9日
    00
  • win10右键不出现菜单?Win10鼠标右键菜单不显示的解决方法

    Win10右键不出现菜单?Win10鼠标右键菜单不显示的解决方法 当我们在Win10系统下使用鼠标右键时,有时候会发现右键菜单不出现,这是一个常见的问题。接下来,我们将介绍一些可能导致这个问题的原因以及一些解决方案。 1. 检查鼠标设备是否连接正常 首先,我们需要检查鼠标设备是否连接正常。如果你使用的是有线鼠标,请确保连接端口稳固可靠;如果是无线鼠标,确保鼠…

    other 2023年6月27日
    00
  • PHP 得到根目录的 __FILE__ 常量

    获取根目录的__FILE__常量是在PHP中获取项目根目录路径的常见方法。下面是获取根目录的__FILE__常量的完整攻略: 1.理解__FILE__常量 __FILE__是在运行脚本时自动定义的常量,代表当前文件的绝对路径以及文件名。在PHP中,__FILE__常量包含了当前文件的完整路径,因此可以通过__FILE__常量解析项目根目录的路径。 2.获取根…

    other 2023年6月27日
    00
  • 详谈java集合框架

    详谈Java集合框架 什么是Java集合框架? Java集合框架是Java提供的一组API,用于处理一组对象的集合。Java集合框架提供了一系列接口和类,可用于存储和操作集合。 Java中的集合框架包括以下三类: 列表(List):可重复的集合,提供有序访问元素的方式,如ArrayList、LinkedList、Stack等; 集(Set):不可重复的集合,…

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