Node.js EXDEV重命名错误

时间:2014-01-12 04:25:25

标签: javascript node.js

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

2 个答案:

答案 0 :(得分:19)

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

答案 1 :(得分:1)

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

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