node读取文件然后socket传送到浏览器无法解码
发布于 8 年前 作者 xivistudio 4042 次浏览 来自 问答

node的FS直接读取了图片的源,我通过websocket传送到浏览器之后就蒙了,utf-8的数据,没办法还原到浏览器显示出来,请问各位大大有什么好办法没有 关于写入到缓冲区转成base64也是一样 这种方式只适合小文件 大文件明显不合适 如果用get 就还要开一个单独的http 不合算QQ图片20160704132212.png

9 回复

大文件…

自己做下分块, 例如 emit file-foo-data, data, 对重复取data, 然后在客户端进行拼接, 最后 emit file-foo-end, 处理拼接结果 ArrayBuffer 的话直接 concat 就好…

嗯, 一点想法, 不知道 socket.io 的包有木有顺序, 你自己可能需要进行编号什么的, 最后做下 sort, 处理

@magicdawn 额,其实 我想说的是,base64的数据在填充进DOM的一瞬间,浏览器会卡,因为一个常规的图片,数据集太大了,我也不明白,但是填充进去的一瞬间浏览器有一个性能的急剧下降,很严重

@xivistudio 哦…那样为毛不直接甩一个 url, 让浏览器慢慢下载

我也看到toString了 From Noder

@magicdawn 我现在直接发送了, 到了浏览器就是这样 socket通道,问题来了,怎么显示出来,就是挂载在一个img dom节点上显示出来QQ截图20160705191430.png

@xivistudio

var base64String = btoa(String.fromCharCode.apply(null, new Uint8Array(arrayBuffer)));

@magicdawn 一个1-2m左右的图片,要同时写入大概8张,如果是base64,那么问题来了,浏览器会爆炸吗?我已经抛弃了socket传送图片了,直接get; base64图片编码根本不适合大文件,一个1-2m的图片,如果打印到控制台,里面的编码能直接冲垮浏览器

回到顶部