首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Formidable/NodeJS HTTP Server JPG保存

Formidable/NodeJS HTTP Server JPG保存
EN

Stack Overflow用户
提问于 2020-06-24 20:41:35
回答 1查看 78关注 0票数 0

Stackoverflow JS Genius的!

我当前的项目有一个问题,它使用node的HTTP createServer,使用Formidable来解析正文数据。

请参阅下面的代码。(http-listener.js)

代码语言:javascript
复制
var listenport = 7200;

const server = http.createServer((req, res) => {

  // Set vars ready
  var data = '';
  var plateImg = '';
  var overview1 = '';
  var overview2 = '';

  new formidable.IncomingForm().parse(req)
  // I originally thought it was sent in files, but it isnt, it's fields.
  .on('file', function(name, file) {
    console.log('Got file:', name);
  })
  // This is the correct procedure for my issue.
  .on('field', function(name, field) {
    console.log('Got a field:', name);
    if(name.toLowerCase() === "anpr.xml")
    {
      // DO PARSE INTO JSON! This works, all is well.
      xml2js.parseString(field, {explicitArray:false, ignoreAttrs:true}, function (err, result)
      {
        if(err)
        {
          alert('Parse: '+err);
        }
        // Console log parsed json data.
        console.log("Read: "+result.EventNotificationAlert.ANPR.licensePlate);
        console.log(result);
        data = result;
      });
    }
    if(name.toLowerCase() === "licenseplatepicture.jpg")
    {
      plateImg = field
      // This doesnt work?
      // I need to store these fields as an image. ? Is this possible with it being sent as a field and not as a file upload.
      // This is the only option I have as I can't control the client sending this data (It's a camera)
      fs.writeFile(config.App.ImageDir+'/Plate.jpg', plateImg, function(err) {
        if(err)console.log(err);
      });
    }
    if(name.toLowerCase() === "detectionpicture.jpg")
    {
      if(overview1 == '')
      {
        overview1 = field;
      }
      else if(overview2 == '')
      {
        overview2 = field;
      }
      else
      {
        // do nothing else.
        console.log("Couldn't send images to variable.");
      }
    }
  })
  .on('error', function(err) {
    alert(err);
  })
  .on('end', function() {
    // Once finished, send to ANPR data to function to handle data and insert to database. WORKS
    // Call anpr function.
    ANPR_ListenData(data, plateImg, overview1, overview2, function(result) {
      if(result.Status > 0)
      {
        console.log("Accepted by: "+result.Example);
        // reset var
        data = '';
        plateImg = '';
        overview1 = '';
        overview2 = '';
        res.writeHead(200, {'content-type':'text/html'});
        res.end();
      }
    });
  });
});

server.listen(listenport, () => {
  console.log('ANPR Server listening on port: ' + listenport);
});

基本上,在字段中发送的图像: licenseplatepicture.jpg等,我希望将它们直接存储到我的应用程序图像目录中。

不幸的是,我无法控制如何将块发送到此服务器,因为它是一个网络摄像头,我只需要编写一个过程。

完整的请求块相当大,所以我会将文件上传到OneDrive,以便您浏览和理解请求。

任何在这方面的帮助都将不胜感激。我已经尝试了我能想到的所有方法,但文件保存为不可读:(.除了我已经做过的和尝试过的,我不知道还能去哪里看或者我还能尝试什么。

请求文本文件:https://1drv.ms/t/s!AqAIyFoqrBTO6hTwCimcHDHODqEi?e=pxJY00

莱恩。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-25 16:42:40

我修复了这个问题,使用的是服务生软件包,而不是可怕的。

这就是我的http监听器在使用餐饮工时的样子。

代码语言:javascript
复制
var inspect = util.inspect;

var Busboy = require('busboy');

http.createServer(function(req, res) {
  if (req.method === 'POST') {
    //vars
    var ref = Math.random().toString(36).substring(5) + Math.random().toString(36).substring(2, 15);;
    var xml = '';
    var parseXml = '';
    var over1, over2 = '';
    var i = 0;

    var busboy = new Busboy({ headers: req.headers });
    busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
      console.log('File [' + fieldname + ']: filename: ' + filename + ', encoding: ' + encoding + ', mimetype: ' + mimetype);
      if(filename.toLowerCase() === "licenseplatepicture.jpg")
      {
        var saveTo = config.App.ImageDir+"/"+ref+"_Plate.jpg";
        if (!fs.existsSync(saveTo)) {
          //file exists
          file.pipe(fs.createWriteStream(saveTo));
        }
      }
      if(filename.toLowerCase() === "detectionpicture.jpg")
      {
        i++;
        var saveTo = config.App.ImageDir+"/"+ref+"_Front_"+i+".jpg";
        if (!fs.existsSync(saveTo)) {
          //file exists
          file.pipe(fs.createWriteStream(saveTo));
        }
      }
      file.on('data', function(data) {
        if(filename.toLowerCase() === "anpr.xml")
        {
          xml += data;
        }
        console.log('File [' + fieldname + '] got ' + data.length + ' bytes');
      });
      file.on('end', function() {
        console.log('File [' + fieldname + '] Finished');
      });
    });
    busboy.on('field', function(fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) {
      console.log('Field [' + fieldname + ']: value: ' + inspect(val));
      // No fields according to busboy
    });
    busboy.on('finish', function() {
      // DO PARSE INTO JSON! This works, all is well.
      xml2js.parseString(xml, {explicitArray:false, ignoreAttrs:true}, function (err, result)
      {
        if(err)
        {
          alert('Parse: '+err);
        }
        // Set parsed var
        parseXml = result;
      });
      var images = '';
      if(i = 2)
      {
        images = `{"Plate":"${ref}_Plate.jpg", "Front":"${ref}_Front_1.jpg", "Overview":"${ref}_Front_2.jpg"}`;
      } else {
        images = `{"Plate":"${ref}_Plate.jpg", "Front":"${ref}_Front_1.jpg", "Overview":"null"}`;
      }
      // Once parsed, send on to ANPR listen function.
      ANPR_ListenData(ref, parseXml, images, function(result) {
        if(result.Status == 1)
        {
          console.log('Data transfered for: '+parseXml.EventNotificationAlert.ANPR.licensePlate);
          console.log('Accepted Camera: '+result.Example);
          res.writeHead(200, { Connection: 'close', Location: '/' });
          res.end();
        }
      });
    });
    req.pipe(busboy);
  }
}).listen(7200, function() {
  console.log('Listening for requests');
});

希望这对将来的其他人有所帮助。确实给我浪费了很多时间。

当我更深入的阅读它的时候,它是我使用的更好的软件包,它对我试图实现的目标更有意义。

Ryan :)。万事如意。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62555287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档