在文件上载期间解析文件内容

时间:2015-02-08 22:31:18

标签: javascript json node.js express busboy

我想知道在使用express / nodejs时是否有人知道如何从上传的文件中提取文件内容

我有以下代码,它清楚如何将输入传递给文件流,但是如何将上传反序列化为普通的javascript对象?目的是从上传的文件中提取信息并在其他地方使用它。理想情况下,我不想通过磁盘上的临时文件。该文件的格式为json。

app.post("/upload", function(req, res){

    req.pipe(req.busboy);

    req.busboy.on('file', function (fieldname, file, filename) {

        console.log("Uploading: " + filename);
        console.log(file);
        console.log(fieldname);

        // I don't want to go via a file, but straight to a JS object


        //fstream = fs.createWriteStream('/files/' + filename);
        //
        //file.pipe(fstream);
        //
        //fstream.on('close', function () {
        //
        //    res.redirect('back');
        //
        //});
    });
});

文件上传的触发如下:

var formData = new FormData($('form')[0]);

        e.preventDefault();

        $.ajax({
            url: 'upload',
            type: 'POST',
            data: formData,
            cache: false,
            dataType:'json',
            contentType: false,
            enctype: 'multipart/form-data',
            processData: false,
            success: function (response) {
            }
        });

1 个答案:

答案 0 :(得分:1)

如果您不介意首先缓冲文件内容,可以执行以下操作:

app.post("/upload", function(req, res){
  req.pipe(req.busboy);
  req.busboy.on('file', function (fieldname, file, filename) {
    var buf = '';
    file.on('data', function(d) {
      buf += d;
    }).on('end', function() {
      var val = JSON.parse(buf);
      // use `val` here ...
    }).setEncoding('utf8');
  });
});