为什么node.js转换POST主体?

时间:2016-05-27 14:27:49

标签: node.js openshift

想要在OpenShift中将JPG二进制正文数据保存到文件系统。但不知何故收到的信息将被转换。你知道为什么吗? node.js是否可能将数据视为文本并对其进行编码/解码?

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

1 个答案:

答案 0 :(得分:5)

您正在使用字符串初始化data,因此将chunk+=添加到其中也会将块转换为字符串(需要进行字符编码)。< / p>

相反,您应该将块收集为Buffer的数组,并使用Buffer.concat()创建最终的缓冲区:

var chunks = [];

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

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