刚开始是想从 Socket.IO 上传文件意外看懂了 base64 上传的方案
关于 Base64 在百度百科上说了, 所以也能懂这个意思
之后看 API 还是有很多格式的样子, FileReader 文档里写的
浏览器端还有 readAsArrayBuffer readAsBinaryString readAsText
几个
前两个只能理解是二进制的文件, 不过这样读了, 服务端应该怎样去用?
在 Node 关于 Buffer 的 API 看有相当多个 API…
不明白… 1, 这么多 API 意义是什么? 2, 怎么和浏览器端的数据格式进行对应呢?
不用这样麻烦吧,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没有问题
@jiyinyiyong 我是读取文件将文件分块传递,服务端接受后将这些块连接起来
newFile = file.slice(filePlace, filePlace + Math.min(块大小, (file.size-filePlace)));
fileReader.readAsBinaryString(newFile);
这个时候触发file.onload,向socket.io服务器推数据, 服务器端 fileInfo[fileName][‘data’] += eventData.data.attachmentData; 如果 data 小于 文件大小 服务器端发消息给客户端继续对余下的部分 直到读完,这样就可以控制进度