【问题标题】:Node.js EXDEV rename errorNode.js EXDEV 重命名错误
【发布时间】:2014-01-31 00:27:33
【问题描述】:

我一直在使用我在一本关于 Node.js 的书中找到的一些代码。这是一个上传图片的简单应用。

它显示 EXDEV 错误(500 错误:EXDEV,重命名)。

有人可以给我一个提示吗?这是我的代码:

exports.submit = function(dir) {
    return function(req, res, next) {
        var img = req.files.photo.image;
        var name = req.body.photo.name || img.name;
        var path = join(dir, img.name);

        fs.rename(img.path, path, function (err) {
            if(err) return next(err);

            Photo.create({
                name: name,
                path: img.name
            }, function (err) {
                if(err) return next(err);
                res.redirect('/');
            });
        });
    };
};

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    无法跨设备重命名文件。我的猜测是您的上传目录(默认为/tmp)位于另一个分区/驱动器上作为您的目标目录(包含在dir 变量中)。

    一些解决方案:

    • 将上传目录配置为与您的目标目录在同一分区/驱动器上;这取决于您使用哪个模块来处理文件上传,express.bodyParser(以及它使用的模块,connect.multipart)接受您可以使用的uploadDir 选项;
    • 在启动您的 Node 应用程序之前,将 TMPDIR 环境变量设置为指向与目标目录相同的分区/驱动器上的临时目录。如果您使用的是 Unix 类型的操作系统:

      env TMPDIR=/path/to/directory node app.js
      
    • 不要在 shell 中设置环境变量,而是将其设置在 Node 应用程序的顶部:

      process.env.TMPDIR = '/path/to/directory';
      
    • 不要重命名,而是使用像mv 这样可以跨设备工作的模块;

    【讨论】:

    • 最好使用shell,然后你的路径不在源代码中。密码等的好策略。
    【解决方案2】:

    使用 Windows XP,我添加到 app.js:

    process.env.TMPDIR = '.';  //new
    

    【讨论】:

    • 更简洁的解决方案是使用npm mv 模块而不是fs.rename()。见https://www.npmjs.com/package/mv
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    相关资源
    最近更新 更多