【问题标题】:File stay in my folder after deleting but deleted after restart Node JS文件在删除后保留在我的文件夹中,但在重启 Node JS 后被删除
【发布时间】:2022-02-18 03:31:21
【问题描述】:

我有一个函数循环遍历包含文件路径的数组,然后删除每个文件。 这些文件与 Multer 一起上传到文件夹“assets/temp/”中 这是我使用 fs 的删除方法:

exports.unlinkFiles = (filesPathsArr) => {
    try {
        filesPathsArr.forEach((filePath) => {
            if (fs.existsSync(filePath)) {
               fs.unlinkSync(filePath)
               console.log('File deleted : ', filePath)
            }
        })
    } catch (error) {
        throw error
    }
}

我的输入例如:

['assets\temp\pexelsphoto19886811645117462309.jpg', 'assets\temp\relaxtriptest1645118333937.mp3']

我的输出:

File Deleted : assets\temp\pexelsphoto19886811645117462309.jpg
File Deleted : assets\temp\relaxtriptest1645118333937.mp3

但在我的文件夹 temp 中:

+ 如果我尝试打开文件,它会显示“启用读取..”

+ 当我重新启动服务器时,文件就消失了

这只是我机器的本地问题,也许问题会在生产中消失?或者也许这只是一个我不应该担心的小细节?还是别的什么?

【问题讨论】:

  • 您是否通过终端验证文件存在?您的 IDE 可能只是提供帮助。
  • 是的,我检查过,该文件确实存在于我磁盘上的文件夹中,但是当我尝试打开它时,文件似乎已损坏,一开始似乎无法完全删除它。
  • 您是否尝试过使用 fs.unlinkSync 的异步版本?喜欢:var fs = require('fs'); fs.unlink('C:\path\to\my\file\test1.txt', (err) => {});
  • 是的,我试过了,没有错误,它只是返回console.log('File deleted', filePath)
  • 嗯。我目前的理论是这与此有关:stackoverflow.com/a/32773995/3597730

标签: javascript node.js fs


【解决方案1】:

我解决了这个问题!

使用 Multer 上传文件后,我将其上传到 AWS S3。

但问题是,如果 AWS 代码出现错误,我会抛出异常,然后从临时目录中删除上传的文件。但是通过这样做,我没有让 AWS 函数完成,所以读取流仍然是打开的。

当时的解决方法是在函数的最后加上myReadStreamCreated.destroy(),在try catch bloc的catch中,如果抛出异常,让fs.unlink能够正确删除文件。

感谢ruby-newbie

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 2022-10-04
    • 1970-01-01
    • 2013-08-12
    • 2020-07-12
    • 2017-05-19
    • 1970-01-01
    相关资源
    最近更新 更多