请问怎样理解浏览器端和 Node 环境里的各种 Binary 和 Buffer 的数据类型?
发布于 13 年前 作者 jiyinyiyong 7269 次预览 最后一次回复是 13 年前 来自
刚开始是想从 Socket.IO 上传文件意外看懂了 base64 上传的方案
关于 Base64 在百度百科上说了, 所以也能懂这个意思
之后看 API 还是有很多格式的样子, FileReader 文档里写的
浏览器端还有 readAsArrayBuffer readAsBinaryString readAsText 几个
前两个只能理解是二进制的文件, 不过这样读了, 服务端应该怎样去用?
在 Node 关于 Buffer 的 API 看有相当多个 API…
不明白… 1, 这么多 API 意义是什么? 2, 怎么和浏览器端的数据格式进行对应呢?
6 回复
在 StackOverflow 找到了 ArrayBuffer 和 Buffer 对转的代码, 好神奇的样子
From ArrayBuffer to Buffer:
不用这样麻烦吧,socket.io 传附件 客户端:fileReader.readAsBinaryString(newFile); 服务器端: var buffer = new Buffer(fileInfo[fileName][‘data’], ‘binary’); gs.write(buffer, function(err, f){ gs.close(function(err, f){ eventHandler.trigger(‘eUploadAttachmentEnd’) }) }); 我这样存放到gridfs没有问题
ArrayBuffer 和 BinaryString 区别是不是不大的?
还有上传进度你有做过么? 想了一下们什么思路的感觉
@jiyinyiyong 我是读取文件将文件分块传递,服务端接受后将这些块连接起来
这个时候触发file.onload,向socket.io服务器推数据, 服务器端 fileInfo[fileName][‘data’] += eventData.data.attachmentData; 如果 data 小于 文件大小 服务器端发消息给客户端继续对余下的部分 直到读完,这样就可以控制进度
@iceblog 这样的话也就是一个
socket.emit的发送分割成很多个了… 这样中间还要穿插一个局部发送完毕的消息, 觉得比较复杂, 过段时间我也学着写一个看看