CNode

node读取文件然后socket传送到浏览器无法解码

问答
Xxivistudio发布于10 年前最后回复10 年前9 回复4680 浏览0 收藏

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

查看回复

回复 (9)

Z
zhangzeyang#1·10 年前

我也看到toString了 From Noder

M
magicdawn#2·10 年前

你 toString 做甚...

socket.io 支持 binary data, emit buffer, 浏览器收到的是 ArrayBuffer, 转成 Uint8Array, 转成base64,不谢

M
magicdawn#3·10 年前

大文件...

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

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

X
xivistudio#4·10 年前
引用 magicdawn你 toString 做甚... socket.io 支持 binary data, emit buffer, 浏览器收到的是 ArrayBuffer, 转成 Uint8Array, 转成ba...

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

X
xivistudio#6·10 年前
引用 magicdawn@xivistudio 哦...那样为毛不直接甩一个 url, 让浏览器慢慢下载

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

X
xivistudio#9·10 年前
引用 magicdawnhttp://www.zhangxinxu.com/wordpress/2012/04/base64 url image %E5%9B%BE%E7%89%87 %E9%A1%B5%E9%9D%...

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

参与回复
登录后即可参与回复。登录