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

看一下本地的目錄:

上傳成功! ??

浙公網安備 33010602011771號