2013-07-17 69 views
0

我嘗試讀出的圖像,保存在MongoDB中,通過GridFS的(不包括臨時文件) 應該直接發送到AJAX中注入成HTMLMongoDB的GridFS的編碼圖片的base64

當我用我的實際功能大比特串形成和發送到客戶端(被保存在Ajax響應VAR)

但因爲它到達客戶端,該位的arent正確了

,所以我尋找一種方式在它之前的圖片編碼被髮送(到base64) (或者是否有其他方式?)

Serverside集團 - 的JavaScript,GridFS的

exports.readFileFromDB = function(req, res, profile, filename, callback){ 
    console.log('Find data from Profile ' + JSON.stringify(profile)); 

    var GridReader = new GridStore(db, filename,"r"); 

    GridReader.open(function(err, gs) { 

     var streamFile = gs.stream(true); 

     streamFile.on("end", function(){ 

     }); 

     // Pipe out the data 
     streamFile.pipe(res); 
    GridReader.close(function(err, result) { 

    }); 

客戶方 - JavaScript的Ajax調用:

function imgUpload(){ 

    var thumb = $("#previewPic"); 

    $('#uploadForm').ajaxSubmit({ 

     beforeSend:function(){ 
      //launchpreloader(); 
     }, 

     error: function(xhr) { 
      //status('Error: ' + xhr.status); 
     }, 

     success: function(response) { 
      console.log(response); 
      var imageData = $.base64Encode(response); 
      console.log(imageData); 
      thumb.attr("src","data:image/png;base64"+imageData); 
      $("#spanFileName").html("File Uploaded") 
     } 
    }); 
} 

回答

1

我做了當前項目類似的東西,但上傳完成後,我返回

{ success : true, url : '/uploads/GRIDFSID/filename.ext' } 

我有快遞路由時,處理01:包含的URL上傳的圖片JSON對象路由從GridFS檢索文件並將其傳回客戶端,因此我可以在IMG SRC中使用上述URL。這實際上就是出現在DOM:

<img src="/uploads/GRIDFSID/filename.ext"> 

的路由處理看起來是這樣的(它使用node-mimegridfs-stream):

app.get(/^\/uploads\/([a-f0-9]+)\/(.*)$/, function(req, res) { 
    var id  = req.params[0]; 
    var filename = req.params[1]; 

    // Set correct content type. 
    res.set('Content-type', mime.lookup(filename)); 

    // Find GridFS file by id and pipe it to the response stream. 
    gridfs 
    .createReadStream({ _id : id }) 
    .on('error', function(err) { 
     res.send(404); // or 500 
    }) 
    .pipe(res); 
}); 

這顯然取決於你的具體設置,如果我的解決方案適用於您。