2016-05-27 2 views
1

Хотите сохранить данные двоичных данных JPG в файловой системе в OpenShift. Но как-то полученная информация будет преобразована. Вы знаете, почему? Возможно ли, что node.js обрабатывает данные как текст и кодирует/расшифровывает его?Почему node.js конвертирует тело POST?

var myServer = http.createServer(function(request, response) 
{ 
    var data = ''; 

    request.on('data', function (chunk){ 
     data += chunk; 
    }); 

    request.on('end',function(){ 

    var date = new Date(); 
    var url_parts = url.parse(request.url,true); 

    if(url_parts.pathname == '/setImage') { 

     if(data != null && data.length > 0) { 

      fs.writeFile('/var/lib/openshift/555dd1415973ca1660000085/app-root/data/asset/' + url_parts.query.filename, data, 'binary', function(err) { 
       if (err) throw err 
       console.log(date + ' File saved. ' + url_parts.query.filename + ' ' + data.length) 

       response.writeHead(200) 
       response.end() 
      }) 
     } 
    } 

enter image description here

ответ

5

Вы инициализация data со строкой, так что добавление chunk «S с += к нему будет преобразовывать куски в строку, а также (что является предметом кодировки символов).

Вместо этого, вы должны собрать куски в виде массива Buffer-х и использовать Buffer.concat() для создания конечного буфера:

var chunks = []; 

request.on('data', function (chunk){ 
    chunks.push(chunk); 
}); 

request.on('end', function() { 
    var data = Buffer.concat(chunks); 
    ... 
}); 
+0

спас мою жизнь, я изо всех сил пытался с ним еще со времен. Благодаря! –

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