1、UploadService
public interface UploadService {//上传图片String uploadImage(MultipartFile file, String type);
}
upload.location = D:/upload
@Value("${upload.location}")private String uploadLocation;//文件上传路径@Overridepublic String uploadImage(MultipartFile file, String type) {//1.创建目录File dir = new File(uploadLocation + "/images/" + type);if (!dir.exists()) {boolean b = dir.mkdirs();//级联创建目录if (!b) {throw new F1Exception("级联创建目录异常");}}//2.给上传的文件起名LocalDateTime now = LocalDateTime.now();String fileName = now.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));Random random = new Random();int sid = random.nextInt(1000);//0~999fileName = fileName + "-" + sid;//3.拼扩展名String originalFileName = file.getOriginalFilename();//上传文件名//assert originalFileName != null;int idx = originalFileName.lastIndexOf(".");String ext = originalFileName.substring(idx);fileName = fileName + ext;//完整的文件名String fullName = dir.getAbsolutePath() + "/" + fileName;//要存储的目标文件File target = new File(fullName);//4.存储文件try {file.transferTo(target);} catch (IOException e) {throw new RuntimeException("保存文件失败");}//5.返回访问地址和存储地址return "/images/" + type + "/" + fileName;}
修正:图片中的回显操作并非通过interceptor,而是通过资源定位实现的
后记:这里的D:/upload完全可以用@Value注入
思路就是:
通过组件的action操作—后端api调用service操作—保存文件—前端回显访问baseUrl + /image/xxx这个链接 — 后端通过资源定位,将该链接定位到存放资源的位置