【SpringBoot】编写简易上传文件接口

本文介绍了如何在SpringBoot应用中使用MultipartFile接收文件上传,包括安装Maven依赖、配置存储路径、编写文件上传接口以及配置静态资源访问。作者通过示例展示了如何处理文件上传并返回文件路径,以及如何让前端通过后端地址访问上传文件。
摘要由CSDN通过智能技术生成

前言

文件上传是在开发中比较常用的一个功能,用户可以通过上传接口将图片、视频、音频或其他类型的文件上传到服务器存储,那在springboot中也可以实现一个文件上传的接口,接下来,我将编写一个最简单的文件上传接口。

实现步骤

1.安装maven相关依赖

此功能用到了hutool中的FileUtil类,所以需要在maven中获取依赖

<dependency>
    <groupId>cn.hutool</groupId>
	<artifactId>hutool-all</artifactId>
	<version>5.8.3</version>
</dependency>
2.定义存储路径

我们可以在application.yaml配置文件定义一个文件存储路径的值,这样就可以通过@Value注解去获取到路径,例如我想将文件存储在项目文件夹下的uploads文件夹,就可以直接写相对路径

然后通过@Value获取值

@Value("${files.upload.path}")
private String uploadPath;
3.编写接口

最后可以编写接口,以下是源码,文件通过MultipartFile接收文件参数,接收后获取文件名和文件后缀,将文件名用UUID重命名后重新拼接,最后与上传路径拼接,将文件写入,写入后将文件路径返回给前端。

import cn.hutool.core.io.FileUtil;
import com.example.bookjava.exception.CusException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.rmi.AccessException;
import java.util.UUID;

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

    @Value("${files.upload.path}")
    private String uploadPath;

    @PostMapping("/file")
    public String upload(@RequestParam MultipartFile file) throws IOException {
     
        try {
            // 获取上传文件的原始文件名
            String fileName = file.getOriginalFilename();
            //重命名文件
            String saveFileName = UUID.randomUUID().toString() + '.' + FileUtil.extName(fileName);
            // 构造文件保存的路径
            String filePath = Paths.get(uploadPath, saveFileName).toString();
            // 获取上传目录的绝对路径
            Path absolutePath = Paths.get(uploadPath).toAbsolutePath();
            // 构造文件的绝对路径
            String absoluteFilePath = Paths.get(absolutePath.toString(), saveFileName).toString();
            // 将上传的文件传输到指定位置
            file.transferTo(new File(absoluteFilePath));
            // 返回文件保存的路径
            return filePath;
        } catch (IOException e) {
            throw new AccessException(e.getMessage());
        }

    }
}

测试

最后,启动项目,测试接口,我这边就通过apifox测试接口。

上传成功,返回了文件路径,文件也存储到了uploads文件夹中。

附加

文件上传后,我们也可以通过application.yaml文件来配置静态资源访问,例如要项目文件夹下uploads文件夹下的所有资源,配置如下。

spring:
  web:
    resources:
      static-locations:     classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources,file:uploads
  mvc:
    static-path-pattern: /uploads/**

这样就可以通过后端地址+文件路径的方式在浏览器访问上传的文件。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值