2013-07-21 2 views
1

У меня есть камера Axis M1011, которая настроена для отправки серии jpeg-изображений, пока она обнаруживает движение, к службе (используя HTTP POST). Я создаю службу, используя node.js.Получение запроса POST с node.js

Я получаю запросы 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(); 
      } 
     }); 

    }); 

} 

На консоли я получаю этот вид вывода. Конечно, содержание длина отличается от файла к файлу:

{ 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 

Проблема заключается в том, что я получаю один такой же, испорчен файл в папке TMP, размер которого не составляет около 33KB, независимо от того, насколько велика изображение. Что я делаю неправильно с получением этих файлов?

+0

Вы знаете, как исправить эту проблему? – bubakazouba

+0

Если честно, нет. Я использовал node.js после, и я думаю, что я действительно сделал это, чтобы работать, но в этом конкретном случае я понятия не имею, что случилось. Возможно, один существующий ответ имеет смысл, но я не работал. –

ответ

0

Вам необходимо обработать запрос POST, чтобы получить отправленный файл. Когда вы отправляете файл в запрос POST, вы переносите метаданные файлов, а также данные и отправляете их на сервер.

Сервер должен декодировать запрос и получить файл. Просто сохранить запрос не будет. Вы не упомянули, используете ли вы какую-либо структуру веб-сервера. Лучше вы используете один такой, как express, который делает это за вас. Express будет анализировать запрос, получить файл и сохранить файл во временный файл.

+0

Да, я использую экспресс. Я также пытался использовать экспресс-парсер, но не повезло, потому что сервер перестает отвечать на запросы после его включения. Возможно, я использую это неправильно. Как это должно быть сделано с помощью выражения? –

+0

На самом деле я должен исправить себя, req.body пуст, хотя используется bodyParser. –

Смежные вопросы