使用强大的文件名解析表单值

Wan*_*ter 6 node.js express formidable

我使用强大的功能来处理NodeJs中的文件上传.我很难解析字段值.

如何获取project_id的值到表单处理程序,所以我可以在我的文件名中写入参数?

<input type="text" id="project_id" value="{{projects._id}}" readonly>
Run Code Online (Sandbox Code Playgroud)

编辑

更具体地说,这是我的表单上传处理的详细视图:

app.post('/uploads/', function (req, res){
    var form = new formidable.IncomingForm();
    form.parse(req, function (err, fields, files) {
        res.writeHead(200, {'content-type': 'image/jpeg'});
        res.write('received upload: \n\n');
        var project = fields.project_id;
        res.end(util.inspect(project, {fields: fields, files: files}));
    });

    form.on('end', function(project, fields, files){ 
        console.log(project); 
        /*Temporary location of our uploaded file */
        var temp_path = this.openedFiles[0].path;
        /*The file name of the uploaded file */
        var file_name =  project + '.' + this.openedFiles[0].name;
Run Code Online (Sandbox Code Playgroud)

我可以登录var projectform.parse一部分.但我没有得到该form.on('end'...部分的变量.

HTML表单

<form   id="uploadForm"
    enctype="multipart/form-data"
    action="/uploads/"
    method="post">
    <input type="text" name="project_id" id="project_id" value="{{projects._id}}" readonly>
    <input multiple="multiple" type="file" name="upload" />
    <button type="submit">Upload</button>
</form>
Run Code Online (Sandbox Code Playgroud)

And*_*ers 5

Formidable的end回调不带任何参数,但我不确定你是否需要在使用parse回调时调用它.我想你要找的是这样的:

var fs = require('fs');
app.post('/uploads', function(req, res, next) {
    var form = new formidable.IncomingForm();
    form.parse(req, function(err, fields, files) {
        if (err) next(err);

        // TODO: make sure my_file and project_id exist    
        fs.rename(files.my_file.path, fields.project_id, function(err) {
            if (err) next(err);
            res.end();
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

end()如果您选择不使用parse回调,则需要监听事件,如下所示:

new formidable.IncomingForm().parse(req)
    .on('file', function(name, file) {
        console.log('Got file:', name);
    })
    .on('field', function(name, field) {
        console.log('Got a field:', name);
    })
    .on('error', function(err) {
        next(err);
    })
    .on('end', function() {
        res.end();
    });
Run Code Online (Sandbox Code Playgroud)