Node.js EXDEV 重命名错误



我一直在玩我在一本关于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('/');
            });
        });
    };
};

无法跨设备重命名文件。我的猜测是您的上传目录(默认为 /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 这样可以跨设备工作的模块;

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

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

最新更新