NodeJS如何发送buffer类型的数据

需求:


整个需求可以抽象为Node.js通过readSteam读取二进制文件并通过post将其发送到后端服务器存储到mongodb中。

目前的问题:


通过createReadStream创建的读流中读取数据,返回的为chunk类型的数据,通过Node.js中的post上传时,数据丢失。

代码如下:

/**

 * Created by Administrator on 2018/4/29.

 */

var fs = require('fs');

var http = require("http");

var queryString = require("querystring")


var filepath = "./mmp.txt";

var readSteam = fs.createReadStream(filepath);

readSteam.on("data",(chunk) => {

    console.log(chunk);

    let mydata = {"name":filepath, data: chunk};

    console.log(123)

    console.log(mydata);

    doapost(mydata);

})

function  doapost(data) {

    let contents = queryString.stringify(data);

    console.log("here");

    console.log(contents);

    let options = {

        host: "localhost",

        path: "/mytestpost/",

        port: 8000,

        method: 'POST',

        headers: {

            'Content-Type': 'application/x-www-form-urlencoded',

            'Content-Length': contents.length

        }

    };

    let req = http.request(options, function (res) {

        res.on("data", function (chunk) {

            console.log(chunk.toString())

        });

        res.on("end", function (d) {

            console.log("end")

        });

        res.on("error", function (e) {

            console.log(e);

        })

    });

    req.write(contents);

    req.end();

}

运行结果如下:

https://img.mukewang.com/5c9dde470001f7a206510267.jpg

可以看到上传的时候name=.%2Fmmp.txt&data=
处buffer数据丢失了,请问各位码友该如何解决?


凤凰求蛊
浏览 381回答 1
1回答

胡说叔叔

这是你querystring模块用的不对let contents = queryString.stringify(data);&nbsp;把Buffer类型的数据序列化没了文档是这样说的:如果 obj 对象中的属性的类型为 <string> | <number> | <boolean> | <string[]> | <number[]> | <boolean[]>,则属性的值会被序列化。 其他类型的属性的值会被强制转换为空字符串。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript