file upload:创build目录,如果不存在
我用强大的处理在NodeJS上的file upload。 这对我有用。 现在我想要更多地构build上传。 我从上传angular度传递一个字段,这是一个project_id
。 我想在我的上传中创build一个文件夹,用这个ID命名并写入文件。
所以我检查目录是否存在,如果没有,我使用fs.mkdir
创build它,然后将文件写入它。 试试这个,我得到一个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 }); }); } }); }); });
您正试图在创build目录之前重命名该文件。 另外,使用fs.exists
是不可取的,这个函数在将来会被弃用。
我在代码中进行了一些更改,可以使用path
模块来创buildpath。 另外,请尝试创build目录,而不pipe它是否已经存在。 如果存在,则忽略错误代码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 }); }); } }); }); });