一段时间后自动从节点服务器删除文件



我正在开发一个文件转换器。首先,我从用户那里获得一个文件,并将其保存到我的节点服务器的上传文件夹中,转换后,我将它保存到下载文件夹中。当文件被转换时,我从文件夹中删除上传的文件,但使用fs.unlink,但在转换5000毫秒后,我从下载文件夹中删除了文件,但问题是同时有1个以上的用户上传文件。

它无法从下载文件夹中删除第二个用户的文件,它显示了一条错误消息。

[Error: ENOENT: no such file or directory, unlink 'downloads/1617962744875.yml'] {
errno: -2,
code: 'ENOENT',
syscall: 'unlink',
path: 'downloads/1617962744875.yml'
}

代码:


var path = require('path')
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/')
},
filename: function (req, file, cb) {
cb(null, Date.now() + path.extname(file.originalname)) //Appending extension
}
})
app.post("/upload", upload.array("files"), uploadFiles);
const uploadFiles = async (req, res) => {
const file = await req.files[0];
postmanCollection = file.path;
outputFile = `downloads/${file.filename.slice(0, -5)}.yml`
await convert();
await fs.unlink(file.path, err => {
if (err) {
console.log('error in deleting a file from uploads')
} else {
console.log('succesfully deleted from the uploads folder')
}
})
res.json(file);
}
const convert = async () => {
try {
let result = // doing my conversion over here
setTimeout(() => {
fs.unlink(outputFile, err => {
if (err) {
console.log(err)
} else {
console.log('succesfully deleted from the downloads folder')
}
})
}, 5000)
} catch (err) {
console.log(err)
}
}

任何人请帮我做这件事。

这是我的建议。

  1. 为上传的文件提供唯一的名称。随机文本字符串可能很好。不要依赖用户对文件名的选择来保持唯一性
  2. 将取消链接操作从上传和转换处理中删除。相反,每隔几分钟对目录进行一次检查,以删除已达到一定年限的文件。关于如何做到这一点,这里有一个很好的建议

最新更新