SpringBoot实现文件上传接口

简介: 文件上传是很多业务场景需要实现的功能,今天就简单以Springboot框架为基础实现文件上传的接口。

前言


文件上传是很多业务场景需要实现的功能,今天就简单以Springboot框架为基础实现文件上传的接口。


正文


代码


使用SpringBoot实现文件上传接口其实很简单。


1、首先定义一个文件上传的服务service及其实现类:


public interface FileService {
    public FileReturn uploadFile(MultipartFile multipartFile);
}
复制代码


@Service
public class FileServiceImpl implements FileService {
    private static final Logger logger = LoggerFactory.getLogger(FileServiceImpl.class);
    @Override
    public FileReturn uploadFile(MultipartFile multipartFile) {
//        文件保存路径
        String filePath = "F:\\filepath";
//        文件名
        String fileName = String.valueOf(System.currentTimeMillis());
        File file = new File(filePath +File.separator + fileName);
        FileOutputStream fileOutputStream = null;
        try {
            fileOutputStream = new FileOutputStream(file);
            IOUtils.copy(multipartFile.getInputStream(),fileOutputStream);
            System.out.println("===========file upload success=======");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
//                关闭
                fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
                logger.error("文件关闭错误",e);
            }
        }
        return new FileReturn<>(1,"文件上传成功",file);
    }
}
复制代码


2、定义一个统一返回结果的实体类:


public class FileReturn<T> implements Serializable {
    private static final long serialVersionUID = -1959544190118740608L;
    private int resultCode;
    private String msg;
    private T data;
    public FileReturn() {
    }
    public FileReturn(int resultCode, String msg, T data) {
        this.resultCode = resultCode;
        this.msg = msg;
        this.data = data;
    }
    public int getResultCode() {
        return resultCode;
    }
    public void setResultCode(int resultCode) {
        this.resultCode = resultCode;
    }
    public String getMsg() {
        return msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public T getData() {
        return data;
    }
    public void setData(T data) {
        this.data = data;
    }
    @Override
    public String toString() {
        return "FileReturn{" +
                "resultCode=" + resultCode +
                ", msg='" + msg + '\'' +
                ", data=" + data +
                '}';
    }
}
复制代码


3、再定义一个工具类处理返回的结果:


public class ReturnValue<T> implements Serializable {
    private static final long serialVersionUID = -1959544190118740608L;
    private int ret;
    private String msg;
    private T data;
    public ReturnValue() {
        this.ret = 0;
        this.msg = "";
        this.data = null;
    }
    public ReturnValue(int retCode, String msg, T data) {
        this.ret = 0;
        this.msg = "";
        this.data = null;
        this.ret = retCode;
        this.data = data;
        this.msg = msg;
    }
    public ReturnValue(int retCode, String msg) {
        this.ret = 0;
        this.msg = "";
        this.data = null;
        this.ret = retCode;
        this.msg = msg;
    }
    public ReturnValue(ReturnCodeAndMsgEnum codeAndMsg) {
        this(codeAndMsg.getCode(), codeAndMsg.getMsg(), null);
    }
    public ReturnValue(ReturnCodeAndMsgEnum codeAndMsg, T data) {
        this(codeAndMsg.getCode(), codeAndMsg.getMsg(), data);
    }
    public int getRet() {
        return this.ret;
    }
    public void setRet(int ret) {
        this.ret = ret;
    }
    public String getMsg() {
        return this.msg;
    }
    public void setMsg(String msg) {
        this.msg = msg;
    }
    public T getData() {
        return this.data;
    }
    public void setData(T data) {
        this.data = data;
    }
    @Override
    public String toString() {
        return "ReturnValue{" +
                "ret=" + ret +
                ", msg='" + msg + '\'' +
                ", data=" + data +
                '}';
    }
}
复制代码


4、最后就是实现一个Controller,处理文件上传的请求:


@RestController
@RequestMapping(value="/file")
public class FileController {
    @Autowired
    private FileService fileService;
    @RequestMapping("/upload")
    public FileReturn uploadFile(@RequestParam("uploadFile") MultipartFile multipartFile){
        return fileService.uploadFile(multipartFile);
    }
}
复制代码


5、可以在application.yml中加入以下配置,限制大小:
复制代码


spring:
  servlet:
    multipart:
#      单个文件最大限制 类型是datasize,单位kb
      max-file-size: 1024
#      单次请求最大限制
      max-request-size: 2048
复制代码


测试


这里使用postman测试软件进行测试,请求地址如下:


http://localhost:8081/share/file/upload
复制代码


参数类型选择file,具体请求如下:


76e0de046de4457080f9b123e62e9f16~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg

选择一个zip格式的文件,然后点击send,然后请求成功了,返回数据如下:


3bf0ce335de8452fb24adfe4af1bf554~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg

然后f盘,file文件夹下文件已经上传过来了,文件名就是时间戳:


9413188d5d924da2af1351c69d8c9c00~tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.webp.jpg

总结


以上就是如何使用springboot开发文件上传接口,其实和springboot没有太大的关系,就是使用它进行接口开发, 这里仅仅是简单的核心内容,可以根据自己实际的业务和需求进行拓展和延伸。


如有任何问题或者不对的地方欢迎一起交流讨论学习!

目录
相关文章
|
7月前
|
安全 NoSQL Java
SpringBoot接口安全:限流、重放攻击、签名机制分析
本文介绍如何在Spring Boot中实现API安全机制,涵盖签名验证、防重放攻击和限流三大核心。通过自定义注解与拦截器,结合Redis,构建轻量级、可扩展的安全防护方案,适用于B2B接口与系统集成。
1072 3
|
XML Java Maven
springboot-多环境配置文件
本文介绍了如何创建开发和生产环境的配置文件,并在IDEA和Maven中进行配置。开发环境中,通过设置profile为`dev`来指定配置文件;生产环境中,使用Maven命令参数`-Pprod`打包并指定配置文件。公共配置可放在`application.yml`中统一管理。日志配置需确保`logback-spring.xml`中的profile正确,以保证日志正常输出。
1117 4
springboot-多环境配置文件
|
10月前
|
算法 网络协议 Java
Spring Boot 的接口限流算法
本文介绍了高并发系统中流量控制的重要性及常见的限流算法。首先讲解了简单的计数器法,其通过设置时间窗口内的请求数限制来控制流量,但存在临界问题。接着介绍了滑动窗口算法,通过将时间窗口划分为多个格子,提高了统计精度并缓解了临界问题。随后详细描述了漏桶算法和令牌桶算法,前者以固定速率处理请求,后者允许一定程度的流量突发,更符合实际需求。最后对比了各算法的特点与适用场景,指出选择合适的算法需根据具体情况进行分析。
926 56
Spring Boot 的接口限流算法
|
存储 前端开发 Java
Springboot静态资源映射及文件映射
在Spring Boot项目中,为了解决前端访问后端存储的图片问题,起初尝试通过静态资源映射实现,但发现这种方式仅能访问打包时已存在的文件。对于动态上传的图片(如头像),需采用资源映射配置,将特定路径映射到服务器上的文件夹,确保新上传的图片能即时访问。例如,通过`addResourceHandler(&quot;/img/**&quot;).addResourceLocations(&quot;file:E:\\myProject\\forum_server\\&quot;)`配置,使前端可通过URL直接访问图片。
838 0
Springboot静态资源映射及文件映射
|
10月前
|
Java API 网络架构
基于 Spring Boot 框架开发 REST API 接口实践指南
本文详解基于Spring Boot 3.x构建REST API的完整开发流程,涵盖环境搭建、领域建模、响应式编程、安全控制、容器化部署及性能优化等关键环节,助力开发者打造高效稳定的后端服务。
1323 1
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
监控 Java Spring
SpringBoot:SpringBoot通过注解监测Controller接口
本文详细介绍了如何通过Spring Boot注解监测Controller接口,包括自定义注解、AOP切面的创建和使用以及具体的示例代码。通过这种方式,可以方便地在Controller方法执行前后添加日志记录、性能监控和异常处理逻辑,而无需修改方法本身的代码。这种方法不仅提高了代码的可维护性,还增强了系统的监控能力。希望本文能帮助您更好地理解和应用Spring Boot中的注解监测技术。
538 16
|
Java 应用服务中间件
SpringBoot获取项目文件的绝对路径和相对路径
SpringBoot获取项目文件的绝对路径和相对路径
1000 1
SpringBoot获取项目文件的绝对路径和相对路径
|
网络协议 Java
springboot配置hosts文件
springboot配置hosts文件
300 11
|
存储 前端开发 JavaScript
SpringBoot结合Minio实现文件切片极速上传
【10月更文挑战第21天】
1003 6