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
看一下本地的目录:
上传成功! 😎
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 本地部署 DeepSeek:小白也能轻松搞定!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 在缓慢中沉淀,在挑战中重生!2024个人总结!
· 大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来!
· 从 Windows Forms 到微服务的经验教训