2015-09-24 3 views
0

В mongodb из кода javascript я могу вставить файл (любого расширения) с помощью gridfs, он хранится как fs.chunks & fs .files. Теперь я хочу прочитать поток этого файла, но на любом из прочитанных сообщений opration на gridStore появляется ошибка: «this.data.buffer.slice не является функцией». Я использовал библиотеку mongojs от Node.JS.MongoDB: прочитайте файл, хранящийся с помощью GridFS от MongoDB в Javascript (используя Node.JS)

// 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 (от яваскрипта коды не из командной строки).

ответ

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

Я отредактировал ответ вместе с соединением дБ. Я обеспечил соединение mongoose и соединение mongoDb. Попробуйте использовать тот, который вы используете. Надеюсь, он работает на этот раз. –

+0

Спасибо Mariya, Uncaught TypeError: gfs.createReadStream() ушел, но он дал новую ошибку @ call: "rstream.on ('data', function (chunk) {}" –

 Смежные вопросы

  • Нет связанных вопросов^_^