From ee7550c890b7fea142813afcd4d94779e749a29f Mon Sep 17 00:00:00 2001 From: Drsakura Date: Fri, 23 Oct 2026 13:52:14 +0800 Subject: [PATCH] =?UTF-8?q?fix(data):=20=E6=B8=85=E7=90=86=E4=B8=B4?= =?UTF-8?q?=E6=97=B6=E7=9B=AE=E5=BD=95=E6=97=B6=E8=B7=B3=E8=BF=87=E5=AD=90?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=EF=BC=8C=E5=B9=B6=E5=9B=9E=E6=94=B6=20multer?= =?UTF-8?q?=20=E6=AE=8B=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit transfers/ 下面还套着 multer 的 uploads/ 子目录;原来只清理一层,目录本身会被当成过期文件去 unlink(失败但刷日志), 而 uploads/ 里因体积超限被丢弃的残片又永远不会被清。现在只删普通文件,并两处都清。 --- backend/lib/dataTransfer/index.js | 2 ++ backend/routes/dataTransfer.js | 2 ++ 2 files changed, 4 insertions(+) diff --git a/backend/lib/dataTransfer/index.js b/backend/lib/dataTransfer/index.js index 6f62d97..5dc57bb 100644 --- a/backend/lib/dataTransfer/index.js +++ b/backend/lib/dataTransfer/index.js @@ -122,6 +122,8 @@ function cleanupUploads(dir, { maxAgeMs = 24 * 60 * 60 * 1000 } = {}) { const file = path.join(dir, name) try { const stat = fs.statSync(file) + /* 只删普通文件:目录里还套着 multer 的 uploads/,别把目录本身当过期文件删 */ + if (!stat.isFile()) continue if (Date.now() - stat.mtimeMs > maxAgeMs) { fs.unlinkSync(file); removed++ } } catch { /* 单个文件失败不影响其它清理 */ } } diff --git a/backend/routes/dataTransfer.js b/backend/routes/dataTransfer.js index 5b68933..ca9881a 100644 --- a/backend/routes/dataTransfer.js +++ b/backend/routes/dataTransfer.js @@ -121,6 +121,8 @@ router.post('/import/preview', guard, upload.single('file'), async (req, res) => fs.renameSync(req.file.path, target) /* 顺手清掉 24 小时前的旧包,避免上传目录无限增长(本次刚移入的 mtime 是现在,不会被删) */ transfer.cleanupUploads(TRANSFER_DIR) + /* multer 落盘后因体积/字段错误被丢弃的残片留在 uploads/,一并清 */ + transfer.cleanupUploads(UPLOAD_DIR) const categories = parseCategories(req.body?.categories) const preview = await transfer.previewImport(db, target, {