HTTP服务 接收文件 的问题(接收的文件总是比发送的文件小)
 发布于 10 年前  作者 wowxhycoming  5290 次预览  最后一次回复是 10 年前  来自 问答 

废话不说,直接上代码,求高人指点。 不会用markdown,来个图片吧。 代码里,我知道问题很大: 问题1:如何按发送的顺序组装数据。 问题2:如何确定数据发送完毕。 untitled5.png

补充一下,这里只有http,没有页面。

11 回复
albin3

小多少呢?我没看出来问题…囧。。 写成这样试试…

var fileData = [];
...
    fileData.push(chunk);
...
    writeFile(path, Buffer.concat(filaData), function(err) {
	});
wowxhycoming

@albin3 在windows下看,上传的文件是185K,接收的文件是176K,并且每次都是176K。

alsotang

赞同 @albin3 你的两个问题在代码里面应该都写对了。 主要的问题是,不要使用 + 符号来操作 Buffer,+ 符号只适合 ascii 码的情况。一旦有二进制或者utf-8的字符,就容易导致数据截断。

参考这里:http://www.infoq.com/cn/articles/nodejs-about-buffer

wowxhycoming

@albin3 有没有可能,http服务还没接收完文件(最后那一小撮),就触发on end了呢?

wowxhycoming

@alsotang 传输的就是二进制

albin3

@wowxhycoming 哦,那数据应该应该都发过来了…看看两个文件的二进制差别能不能找到线索。。

albin3

@alsotang 链接点赞。我也是想到深入浅出这一段,哈哈~

albin3

@wowxhycoming 这不可能的,HTTP会顺序收到数据的…tcp保证这一点==#。是真的end了才会触发end。。

leapon

@wowxhycoming diff 一下看看差在哪里。

会不会是CRLF?