| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- 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();
- }
- }
|