使用 node.js 处理上传文件 ,容易想到的做法是使用 express 来处理 post 数据 ,然后将数据存在文件系统中 。但在千寻中 ,这种方法看起来并不够理想 。千寻中 ,我们一直在使用 socket.io 作为通讯的媒介 。因此 ,在这里 ,我们需要考虑使用一种能直接利用 socket.io 完成通讯的做法 。
通过查阅 phonegap 的文档 ,我们发现 phonegap 提供了一个名为 navigator.camera.getPicture 的接口 ,通过使用这个接口 ,我们可以得到经过 base64 格式编码的图像数据 ,我们只需要将这个数据通过 socket.io 发给服务器即可 。
进一步查阅 node.js 的文档 ,我们发现 ,Buffer 类可以实现 base64 的编解码 ,使用这个类即可轻松完成我们所需的任务 。摘录部分服务器端代码如下:
function updatePortrait(data, callback){
socket.get('uid', function (err, uid) {
if (!uid) return;
var decodedImage = new Buffer(data, 'base64');
fs.writeFile('../client/portraits/' + uid +'.jpg', decodedImage,
function (err) { callback(err); });
});
}