LocalDiskStorageService.java 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package com.zxyj.service.impl;
  2. import com.zxyj.service.StorageService;
  3. import org.springframework.beans.factory.annotation.Value;
  4. import org.springframework.stereotype.Service;
  5. import org.springframework.web.multipart.MultipartFile;
  6. import java.io.File;
  7. import java.io.IOException;
  8. import java.nio.file.Files;
  9. import java.nio.file.Path;
  10. import java.nio.file.Paths;
  11. import java.time.LocalDate;
  12. import java.time.format.DateTimeFormatter;
  13. import java.util.UUID;
  14. @Service
  15. public class LocalDiskStorageService implements StorageService {
  16. @Value("${file.upload-dir:./uploads}")
  17. private String uploadDir;
  18. @Override
  19. public String storeFile(MultipartFile file) {
  20. try {
  21. // 生成日期路径:uploads/2026/04/05/
  22. String datePath = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd"));
  23. Path uploadPath = Paths.get(uploadDir, datePath);
  24. // 创建目录
  25. if (!Files.exists(uploadPath)) {
  26. Files.createDirectories(uploadPath);
  27. }
  28. // 生成唯一文件名
  29. String originalFilename = file.getOriginalFilename();
  30. String extension = "";
  31. if (originalFilename != null && originalFilename.contains(".")) {
  32. extension = originalFilename.substring(originalFilename.lastIndexOf("."));
  33. }
  34. String filename = UUID.randomUUID().toString() + extension;
  35. // 保存文件
  36. Path filePath = uploadPath.resolve(filename);
  37. file.transferTo(filePath.toFile());
  38. // 返回相对URL路径
  39. return "/" + datePath + "/" + filename;
  40. } catch (IOException e) {
  41. throw new RuntimeException("文件存储失败", e);
  42. }
  43. }
  44. @Override
  45. public void deleteFile(String fileUrl) {
  46. if (fileUrl == null || fileUrl.isEmpty()) {
  47. return;
  48. }
  49. try {
  50. Path filePath = Paths.get(uploadDir, fileUrl);
  51. Files.deleteIfExists(filePath);
  52. } catch (IOException e) {
  53. // 记录日志但不抛出异常
  54. System.err.println("删除文件失败: " + fileUrl);
  55. }
  56. }
  57. @Override
  58. public String getFilePath(String filename) {
  59. return Paths.get(uploadDir, filename).toString();
  60. }
  61. }