我一直在玩我在一本关于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