package com.zxyj.service.impl; import com.zxyj.service.StorageService; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.UUID; @Service public class LocalDiskStorageService implements StorageService { @Value("${file.upload-dir:./uploads}") private String uploadDir; @Override public String storeFile(MultipartFile file) { try { // 生成日期路径:uploads/2026/04/05/ String datePath = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd")); Path uploadPath = Paths.get(uploadDir, datePath); // 创建目录 if (!Files.exists(uploadPath)) { Files.createDirectories(uploadPath); } // 生成唯一文件名 String originalFilename = file.getOriginalFilename(); String extension = ""; if (originalFilename != null && originalFilename.contains(".")) { extension = originalFilename.substring(originalFilename.lastIndexOf(".")); } String filename = UUID.randomUUID().toString() + extension; // 保存文件 Path filePath = uploadPath.resolve(filename); file.transferTo(filePath.toFile()); // 返回相对URL路径 return "/" + datePath + "/" + filename; } catch (IOException e) { throw new RuntimeException("文件存储失败", e); } } @Override public void deleteFile(String fileUrl) { if (fileUrl == null || fileUrl.isEmpty()) { return; } try { Path filePath = Paths.get(uploadDir, fileUrl); Files.deleteIfExists(filePath); } catch (IOException e) { // 记录日志但不抛出异常 System.err.println("删除文件失败: " + fileUrl); } } @Override public String getFilePath(String filename) { return Paths.get(uploadDir, filename).toString(); } }