Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB:在Javascript中从MongoDB读取使用GridFS存储的文件(使用Node.JS)_Javascript_Node.js_Mongodb_Gridfs - Fatal编程技术网

MongoDB:在Javascript中从MongoDB读取使用GridFS存储的文件(使用Node.JS)

MongoDB:在Javascript中从MongoDB读取使用GridFS存储的文件(使用Node.JS),javascript,node.js,mongodb,gridfs,Javascript,Node.js,Mongodb,Gridfs,在来自javascript代码的mongodb中,我可以使用gridfs插入一个文件(任何扩展名),它存储为fs.chunks&fs.files。现在我想读取该文件的流,但在gridStore上的任何读取操作调用中,都会出现给定错误:“this.data.buffer.slice不是函数”。我使用了Node.JS中的mongojs库 // Write a file into MongoDB - Working fine. // Our file ID var fileId = new Objec

在来自javascript代码的mongodb中,我可以使用gridfs插入一个文件(任何扩展名),它存储为fs.chunks&fs.files。现在我想读取该文件的流,但在gridStore上的任何读取操作调用中,都会出现给定错误:“this.data.buffer.slice不是函数”。我使用了Node.JS中的mongojs库

// 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代码而不是从命令提示符)。此代码对我来说运行良好。试试这个。希望它能起作用

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);

 });

谢谢你宝贵的回复。我以前试过这个。仍然再次尝试&其抛出错误:uncaughttypeerror:gfs.createReadStream不是函数。我已将答案与dB连接一起编辑。我提供了mongoose连接和mongoDb连接。试试你正在使用的那个。希望这次能成功。谢谢Mariya,UncaughtTypeError:gfs.createReadStream()已经消失,但是它发出了新的错误@call:“rstream.on('data',function(chunk){}”错误:UncaughtTypeError:this.data.buffer.slice不是一个函数:@..\Node modules\mongodb\lib\utils.js:97。