zss
2 天以前 b46efc8d8cf388dd1d2cf7d3749b1230bc62f1cd
src/main/java/com/ruoyi/other/service/impl/TempFileServiceImpl.java
@@ -26,6 +26,7 @@
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
@@ -76,8 +77,17 @@
        tempFileRecord.setExpireTime(LocalDateTime.now().plusHours(2)); // 2小时后过期
        tempFileRecord.setType(type);
        tempFileMapper.insert(tempFileRecord);
        return tempFileRecord;
    }
    @Override
    public String uploadByCommon(MultipartFile file, Integer type, Long id) throws  IOException{
        TempFile tempFile = uploadFile(file, type);
        if (tempFile != null) {
            migrateTempFilesToFormal(id, Collections.singletonList(tempFile.getTempId()), type);
            return tempFile.getTempPath();
        }
        return null;
    }
    /**
@@ -123,12 +133,15 @@
            try {
                // 执行文件迁移(使用原子操作确保安全性)
                Files.move(
                        Paths.get(tempFile.getTempPath()),
                        formalFilePath,
                        StandardCopyOption.REPLACE_EXISTING,
                        StandardCopyOption.ATOMIC_MOVE
                );
//                Files.move(
//                        Paths.get(tempFile.getTempPath()),
//                        formalFilePath,
//                        StandardCopyOption.REPLACE_EXISTING,
//                        StandardCopyOption.ATOMIC_MOVE
//                );
                // 原子移动失败,使用复制+删除
                Files.copy(Paths.get(tempFile.getTempPath()), formalFilePath, StandardCopyOption.REPLACE_EXISTING);
                Files.deleteIfExists(Paths.get(tempFile.getTempPath()));
                log.info("文件迁移成功: {} -> {}", tempFile.getTempPath(), formalFilePath);
                // 更新文件记录(关联到业务ID)
@@ -152,7 +165,7 @@
        }
    }
    @Scheduled(cron = "0 0 3 * * ?") // 每天凌晨3点执行
//    @Scheduled(cron = "0 0 3 * * ?") // 每天凌晨3点执行
    public void cleanupExpiredTempFiles() {
        LambdaQueryWrapper<TempFile> wrapper = new LambdaQueryWrapper<>();
        wrapper.lt(TempFile::getExpireTime, LocalDateTime.now()); // expireTime < 当前时间