2013-07-21 79 views
1

我有一个Axis M1011相机,它设置为只要检测到运动,就会向服务(使用HTTP POST)发送一系列jpeg图像。我正在使用node.js构建服务。使用node.js接收POST请求

我成功地接收POST请求与他们的标题,但我在保存请求正文中的数据时遇到问题。这里是代码:

function addEvent(req, res) 
{ 
    var buffer = ''; 
    console.log(req.headers); 
    req.on("data", function(chunk) 
    { 
     console.log("chunk received"); 
     buffer += chunk; 
    }); 
    req.on("end", function() 
    { 
     console.log("saving file"); 
     fs.writeFile("./tmp/"+ new Date().getTime()+".jpg", buffer, function(error) 
     { 
      if(error) 
      { 
       console.log(error); 
      } 
      else 
      { 
       console.log("saved"); 
       res.send("OK"); 
       res.end(); 
      } 
     }); 

    }); 

} 

在控制台上,我得到了这种输出。 Ofcourse,内容长度从文件的不同而不同文件:

{ host: '192.168.0.100:8888', 
    'content-type': 'image/jpeg', 
    'content-disposition': 'attachment; filename="file13-07-19_20-49-44-91"', 
    'content-length': '18978' } 
chunk received 
chunk received 
chunk received 
chunk received 
chunk received 
chunk received 
chunk received 
chunk received 
chunk received 
chunk received 
chunk received 
chunk received 
chunk received 
chunk received 
saving file 
saved 

的问题是,我得到一个相同的,损坏的,其中大小约为33KB,不管有多大的图像tmp文件夹的文件。我在接收这些文件时做错了什么?

+0

你知道如何解决这个问题吗? – bubakazouba

+0

说实话,没有。我之后使用过node.js,我想我实际上已经开始工作,但在这种情况下,我不知道哪里出了什么问题。也许现有的答案有意义,但我没有解决。 –

回答

0

您需要处理POST请求以获取已发送的文件。当您在POST请求中提交文件时,您将文件元数据以及数据封装并将其发送到服务器。

服务器必须对请求进行解码并获取文件。只保存请求不会。您没有提及您是否使用任何Web服务器框架。你最好使用一个像express这样为你做的。 Express将解析请求,获取文件对象并将文件保存到临时文件中。

+0

是的,我使用快递。我也尝试使用express body parser,但没有运气,因为服务器在打开后停止响应。这可能是我错用了它。这应该如何用快递完成? –

+0

其实我必须纠正自己,req.body是空的,尽管使用了bodyParser。 –