Мое приложение использует узел 0.10.1, express 3.1.1, mongoose 3.6.4, mongo 2.4.1 и gridfs-stream 0.4. 0.Почему я не могу установить идентификатор на GridFS, используя идентификатор из связанного документа mongo.
Я настроил мангуст и gridfs-поток с подключением акций следующим образом:
/************* app.js ***************/
//Added this in edit to show setup of mongoose and gridfs-stream
var mongoose = require("mongoose");
var Grid = require('gridfs-stream');
Grid.mongo = mongoose.mongo;
global.conn = mongoose.createConnection(dbUri);
conn.once('open', function(){
global.gfs = Grid(conn.db);
});
Я пытаюсь загружать/скачивать файлы с использованием gridfs-потоком. Моя загрузка выглядит так:
exports.uploadFile = function(req, res){
var file = req.files.upload;
var docId = mongoose.Types.ObjectId(req.query.docId);
var filename = req.query.ileName;
var contentType = file.type;
if(!file) return res.send({result: 'NO_FILE_UPLOADED'});
var writestream = gfs.createWriteStream({
_id: docId,
filename: filename,
mode: 'w',
root: 'documents'
});
// more here but ommitted
};
DocId исходит из ObjectId документа mongo.
Возможно, загрузка выполнена. Я могу видеть закачанный файл с помощью Монго консоли:
db.documents.files.findOne()
{
"_id" : ObjectId("5167604d1b63f2541400003d"),
"filename" : "borrower1.fnm",
"contentType" : "binary/octet-stream",
"length" : 3473,
"chunkSize" : 262144,
"uploadDate" : ISODate("2013-04-12T15:43:06.723Z"),
"aliases" : null,
"metadata" : null,
"md5" : "04c85fe5e9ba0e798fd5eb90f1cb62be"
}
При попытке загрузить файл, используя следующие:
exports.downloadFile = function(req, res){
var docId = mongoose.Types.ObjectId(req.query.docId);
var readstream = gfs.createReadStream({_id: docId});
readstream.pipe(res);
};
Следующая ошибка возникает:
Error: 5167604d1b63f2541400003d does not exist
Когда я пытаюсь извлечь файл непосредственно из консоли mongo с помощью _id, который, как представляется, будет храниться в db gridfs, он возвращает null. Но если я попытаюсь извлечь файл, используя имя файла, консоль mongo извлекает файл.
Может ли _id загруженного файла в gridfs не задаваться с помощью _id связанного документа о монго? Если да, то как мой код неправильный? Если нет, существует ли способ, чтобы сетка генерировала идентификатор и возвращал назначенный идентификатор, чтобы я мог хранить его в соответствующем документе mongo?
Благодарим за помощь!
Роб
Спасибо. Но нет, я добавил. Я этого не показывал. Я редактировал свой вопрос, чтобы показать, что я добавил. –