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

Node.js 一段时间后从节点服务器自动删除文件,node.js,express,fs,Node.js,Express,Fs,我正在做一个文件转换器。 首先,我从用户那里获取一个文件,并将其保存到节点服务器的uploads文件夹中,转换后,我将其保存到download文件夹中。 当文件被转换时,我会使用fs.unlink从文件夹中删除上载的文件,但转换5000 ms后,我会从下载文件夹中删除该文件,但问题是同时有多个用户上载该文件 它无法从下载文件夹中删除第二个用户的文件,它显示一条错误消息 [Error: ENOENT: no such file or directory, unlink 'downloads/161

我正在做一个文件转换器。 首先,我从用户那里获取一个文件,并将其保存到节点服务器的uploads文件夹中,转换后,我将其保存到download文件夹中。 当文件被转换时,我会使用fs.unlink从文件夹中删除上载的文件,但转换5000 ms后,我会从下载文件夹中删除该文件,但问题是同时有多个用户上载该文件

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

[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)
    }
}
任何人都可以帮我做这件事。

这是我的建议

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

  • 请澄清你的问题。当两个不同的用户以完全相同的名称上传文件时,您的失败似乎就发生了。是这样吗?不,当两个用户同时上传一个文件时。它只删除第一个下载的文件,然后对于第二个用户,它再次尝试删除第一个下载的文件(5秒后已删除)。无法更新第二个下载文件的名称,因为第二个用户未得到更新。这有意义吗