我在使用强大的NodeJS处理文件上传。这适合我。现在我想更多地构建上传内容。我通过上传来传递角度的字段,这是一个project_id
。我想在我的上传中创建一个文件夹,以此ID命名并在其中写入文件。
所以我检查目录是否存在,如果不存在,我用fs.mkdir
创建它,然后将文件写入其中。试试这个,我收到EINVAL, rename
错误和HTTP 500状态代码。
这是我的尝试,任何人都知道如何解决这个问题?
app.post('/uploads/', function(req, res, next){
var form = new formidable.IncomingForm();
form.keepExtensions = true;
form.parse(req, function(err, fields, files){
if (err) next (err);
fs.exists('uploads/' + fields.project_id + '/', function (exists){
if (exists) {
fs.rename(files.upload.path, 'uploads/' + fields.project_id + '/' +files.upload.name, function(err){
if (err) next (err);
res.render('profile.ejs',{
user: req.user
});
});
} else {
fs.mkdir('uploads/' + fields.project_id + '/', function (err){
if (err) next (err);
});
fs.rename(files.upload.path, 'uploads/' + fields.project_id + '/' + files.upload.name, function(err){
if(err) next (err);
res.render('profile.ejs',{
user:req.user
});
});
}
});
});
});
答案 0 :(得分:3)
您正在尝试在创建目录之前重命名该文件。此外,不建议使用fs.exists
,并且将来不推荐使用该函数。
我对您的代码进行了一些更改,您可以使用path
模块来创建路径。此外,尝试创建目录,无论它是否已存在。如果存在,请忽略错误代码EEXIST。
更新的代码:
// add this to the beggining
var path = require('path');
app.post('/uploads', function(req, res, next){
var form = new formidable.IncomingForm();
form.keepExtensions = true;
form.parse(req, function(err, fields, files){
if (err) next (err);
fs.mkdir(path.resolve('uploads', fields.project_id), function (err) {
if (err && err !== 'EEXIST') {
next(err);
} else {
fs.rename(files.upload.path, path.resolve('uploads', fields.project_id, files.upload.name), function(err){
if(err) next (err);
res.render('profile.ejs',{
user:req.user
});
});
}
});
});
});