node.js中文件上傳的一種方法

Posted on May 5, 2012 -

使用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); });
    });
}