2015-09-24 181 views
0

在javascript代碼的mongodb中,我能夠使用gridfs插入一個文件(任何擴展名),它存儲爲fs.chunks & fs .files。現在我想讀取這個文件的流,但是在gridStore上的任何讀操作調用中它給出錯誤:「this.data.buffer.slice不是函數」。我使用了Node.JS的mongojs庫。MongoDB:使用Javascript(使用Node.JS)從MongoDB中讀取使用GridFS存儲的文件

// Write a file into MongoDB - Working fine. 
// Our file ID 
var fileId = new ObjectID(); 
// Open a new file 
var gridStore; 
// Create a file and open it 
gridStore = new GridStore(db, fileId, "D:/Files/Sofa 2 N050210.3DS", "w+"); 
var data = fs.readFileSync('D:/Files/Sofa 2 N050210.3DS'); 
gridStore.open(function (err, gridStore) { 

gridStore.write(data, function (err, gridStore) { 
// Flush the file to GridFS 
gridStore.close(function (err, fileData) { 
     // Write successfull 
    }); 
}); 
}); 

現在的問題是閱讀時,關閉Gridstore的後,我試圖打開文件進行讀取&它在讀取調用即在下面的代碼行中沒有-4給錯誤。

gridStore.close(function (result) { 
var gridStore = new GridStore(db, "test_gs_seek_with_buffer", "r"); 
gridStore.open(function (err, gridStore) { 
gridStore.read(5, function (err, data) { 
    if(err){ 
      console.log("Error"); return; 
    } 
    console.log(data.toString()); 
}); 
}); 
}); 

請幫我找回解決方法或讀取存儲在GridFS中的文件的方法(不是來自命令提示符的javascript代碼)。

回答

1

此代碼適合我。試試這個。希望它有效。

var mongoose = require('mongoose'); 
var Grid = require('gridfs-stream'); 
mongoose.connection.once('open', function() { 
gfs = new Grid(mongoose.connection.db, mongoose.mongo);//If you are using mongoose 
}); 

var db = new mongo.Db('yourDatabaseName', new mongo.Server("127.0.0.1", 27017)); //if you are using mongoDb directily           
var gfs = Grid(db, mongo);   
var rstream = gfs.createReadStream(filename); 
var bufs = []; 
rstream.on('data', function (chunk) { 
    bufs.push(chunk); 
}).on('error', function() { 
    res.send(); 
}) 
.on('end', function() { // done 

      var fbuf = Buffer.concat(bufs); 

      var File = (fbuf.toString('base64')); 

      res.send(File); 

}); 
+0

感謝您的寶貴答覆。我曾嘗試過。仍然再次嘗試&它的拋出錯誤:未捕獲TypeError:gfs.createReadStream不是一個函數。 –

+0

我已經編輯了答案以及dB連接。我提供了貓鼬連接和mongoDb連接。試試你正在使用的那個。希望這一次有效。 –

+0

感謝Mariya,Uncaught TypeError:gfs.createReadStream()不見了,但它給出了新的錯誤@ call:「rstream.on('data',function(chunk){}」 –

相關問題