HTTP服务 接收文件 的问题(接收的文件总是比发送的文件小)
发布于 9 年前 作者 wowxhycoming 4450 次浏览 最后一次编辑是 8 年前 来自 问答

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

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

11 回复

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

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

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

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

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

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

@alsotang 传输的就是二进制

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

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

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

@alsotang 搞定 多谢指点

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

会不会是CRLF?

回到顶部