SpringBoot 实现文件上传

参考:Java springboot进阶教程 文件上传功能实现 后端代码编写 常见错误分析与解决

在 Service 业务层接口中增加一个上传文件的方法

因为文件并不是上传至数据库中,所以不需要编写 Dao 数据接口层相关的代码

public interface XxxService {
    ...
    R upload(MultipartFile file);
}

在 Impl 实现类中实现这个方法

public class XxxServiceImpl implements XxxService {
    ...
    @Override
    public R upload(MultipartFile file) {
        // 对文件判空
        if (file.isEmpty()) {
            return R.error("文件为空");
            // 返回一个 R 类型给前端
            // R 为规定数据格式的统一返回对象
        }
        String originalFileName = file.getOriginalFilename();
        // ↑ 获取文件的名称
        String fileName = System.currentTimeMillis() + "." + originalFileName.substring(originalFileName.lastIndexOf(".") + 1);
        // ↑ 以当前时间戳对文件进行重命名,并保存文件名后缀
        String filePath = "/home/hsk/tempdownload/";
        // ↑ 设定文件的所要上传的服务器路径
        File dist = new File(filePath + fileName);

        // ↓ 对文件路径判空
        if (!dist.getParentFile().exists()) {
            dist.getParentFile().mkdirs();
            // ↑ 若文件路径不存在则创建
        }
        try {
            // ↓ 上传文件
            file.transferTo(dist);
        } catch (Exception e) {
            e.printStackTrace();
            return R.error("上传失败");
        }
        return R.success("上传成功");
    }
}

Controller 表现层实现

这里为了方便没有写测试类,直接在 Controller 包下新建了 UploadTestContoller

package com.example.xxx.controller;

import ...

@RestController
@RequestMapping("/upload")
public class UploadTestController {
    @Autowired
    private XxxService xxxService;

    // ↓ 使用 put 方法上传
    @PutMapping
    private R upload(@RequestParam("file") MultipartFile file) {
        return xxxService.upload(file);
        // 所返回的是一个 R 对象
    }
}

测试

使用例如 Postman 等测试工具,我这里用的是 Apifox

看一下本地的目录:

上传成功! 😎

posted @ 2022-10-06 17:53  HuStoking  阅读(616)  评论(0编辑  收藏  举报