4

我正在用强大的 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
                        });
                    });
                }
            });
        });
    });
4

1 回答 1

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
                    });
                });
            }
        });
    });
});
于 2015-05-10T11:25:46.823 回答