HTTP服务 接收文件 的问题(接收的文件总是比发送的文件小)
废话不说,直接上代码,求高人指点。 不会用markdown,来个图片吧。 代码里,我知道问题很大: 问题1:如何按发送的顺序组装数据。 问题2:如何确定数据发送完毕。
补充一下,这里只有http,没有页面。
11 回复
小多少呢?我没看出来问题…囧。。 写成这样试试…
var fileData = [];
...
fileData.push(chunk);
...
writeFile(path, Buffer.concat(filaData), function(err) {
});
@albin3 在windows下看,上传的文件是185K,接收的文件是176K,并且每次都是176K。
赞同 @albin3 你的两个问题在代码里面应该都写对了。 主要的问题是,不要使用 + 符号来操作 Buffer,+ 符号只适合 ascii 码的情况。一旦有二进制或者utf-8的字符,就容易导致数据截断。
@albin3 有没有可能,http服务还没接收完文件(最后那一小撮),就触发on end了呢?
@alsotang 传输的就是二进制
@wowxhycoming 哦,那数据应该应该都发过来了…看看两个文件的二进制差别能不能找到线索。。
@alsotang 链接点赞。我也是想到深入浅出这一段,哈哈~
@wowxhycoming 这不可能的,HTTP会顺序收到数据的…tcp保证这一点==#。是真的end了才会触发end。。
@alsotang 我再试试
@alsotang 搞定 多谢指点
@wowxhycoming diff 一下看看差在哪里。
会不会是CRLF?