【问题标题】:How can I remove temporary files created by fs.lstat?如何删除 fs.lstat 创建的临时文件?
【发布时间】:2014-03-14 19:52:20
【问题描述】:

我有一个简单的方法来检查目录是否存在。我注意到,当调用 fs.lstat 时,它会创建一个类似于 临时文件 的文件,其名称类似于“12116-ocskz3”

lstat 为什么会创建这些临时文件以及如何删除它们?

self.checkDirectory = function (callback) {
    fs.lstat(uploadDir, function (err, stats) {
        // Linux fielsystem manual - http://linux.die.net/man/2/lstat
        if (!err && stats.isDirectory()) {

            //Directory exists
            console.log('This directory already exists!');

            if (typeof(callback) == 'function') {
                callback(true, uploadDir);
            }

        } else if (err.code === 'ENOENT') {
            // ENOENT - A component of path does not exist, or path is an empty string.
            console.log(err.code + ': This directory doesn\'t exists!');

            if (typeof(callback) == 'function') {
                callback(false, uploadDir);
            }

        }
    });
};

【问题讨论】:

    标签: node.js fs


    【解决方案1】:

    lstat 不会创建任何临时文件


    编辑:好的,正如在 cmets 中发现的那样,multipart 模块正在创建它们。它已经在博客中提到了several times,只需在某个地方搜索即可。

    最简单的解决方案是不使用 bodyParser(出于这个原因,无论如何它已被弃用),而是使用 express.json()express.urlencoded()。如果您确实需要上传文件,请阅读docs 了解如何处理它们。它应该在req.files 的某个地方。

    【讨论】:

    • 这就是我的假设,但在我的情况下是这样。我没有在我的应用程序中调用任何其他 fs 方法。我想知道这是否是 Windows 的怪癖?
    • 哦...对不起,也许是这样。我不记得有人长时间使用 Windows,所以我忘记了那些怪癖甚至存在。如果它真的是一个 Windows 怪癖,node.js 应该在退出时自动删除它们。如果没有,您应该报告它here
    • 嗯...它不会删除它们。我会在我的 Mac 上安装该应用程序,稍后再报告。
    • 好吧,我发现从:app.use(express.bodyParser({uploadDir: __dirname + '/uploads'})); 删除:{uploadDir: __dirname + '/uploads'} 可以阻止这种情况的发生,但它并不能解释问题。
    • 不,事实上它确实解释了这个问题。我更新了答案来解释这一点。
    【解决方案2】:

    问题是由在表单元素上使用 encrypt 属性引起的,其值如下所示:

    enctype="multipart/form-data 
    

    我认为 multipart 将在未来的版本中被更有利的东西取代,临时文件的问题是我认为的原因之一。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      • 1970-01-01
      • 2021-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      相关资源
      最近更新 更多