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
看一下本地的目录:
上传成功! 😎