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

Ján*_*nos 1 node.js openshift

想要将JPG二进制体数据保存到文件系统中OpenShift.但不知何故收到的信息将被转换.你知道为什么吗?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()
            })
        }
    }
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

rob*_*lep 5

您正在data使用字符串进行初始化,因此向其添加chunk"s" +=也会将块转换为字符串(这取决于字符编码).

相反,你应该将这些块作为一个数组收集Buffer并用于Buffer.concat()创建最终的Buffer:

var chunks = [];

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

request.on('end', function() {
  var data = Buffer.concat(chunks);
  ...
});
Run Code Online (Sandbox Code Playgroud)