Tôi đang sử dụng mongoose và gridfs-stream để lưu trữ và đọc tệp từ mongodb. Tôi đang làm theo ví dụ ở đây: https://github.com/aheckmann/gridfs-streamĐọc tệp với node.js, mongoose, gridfs-stream
Viết tệp vào db hoạt động tốt nhưng tôi gặp sự cố khi đọc tệp.
Cái vẻ MongoDB (hiển thị các bộ sưu tập)
fs.chunks
fs.files
gì ngoại hình chỉ số tập tin (db.fs.files.find())
{ "_id" : ObjectId("5140392659851df70b000001"),
"filename" : "cover",
"contentType" : "binary/octet-stream",
"length" : 85734,
"chunkSize" : 262144,
"uploadDate" : ISODate("2013-03-13T08:30:30.299Z"),
"aliases" : null,
"metadata" : null,
"md5" : "4476b26067daa0677978ba501308a35d" }
Sau đó, tôi sử dụng mã này để có được file có tên là "cover"
...
var gfs = Grid(mongoose.connection.db, mongoose.mongo)
var readstream = gfs.createReadStream('cover')
Một lỗi xảy ra:
Error: cover does not exist
at self.collection.self.fileId (/mypath/node_modules/mongoose/node_modules/mongodb/lib/mongodb/gridfs/gridstore.js:198:26)
at Cursor.nextObject (/mypath/node_modules/mongoose/node_modules/mongodb/lib/mongodb/cursor.js:654:35)
at Cursor.close (/mypath/node_modules/mongoose/node_modules/mongodb/lib/mongodb/cursor.js:960:5)
at Cursor.nextObject (/mypath/node_modules/mongoose/node_modules/mongodb/lib/mongodb/cursor.js:654:17)
at Cursor.nextObject.commandHandler (/mypath/node_modules/mongoose/node_modules/mongodb/lib/mongodb/cursor.js:631:14)
at Db._executeQueryCommand (/mypath/node_modules/mongoose/node_modules/mongodb/lib/mongodb/db.js:1702:5)
at g (events.js:185:14)
at EventEmitter.emit (events.js:115:20)
at Server.Base._callHandler (/mypath/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/base.js:130:25)
at Server.connect.connectionPool.on.server._serverState (/mypath/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:517:20)
Tôi googled nó và tìm thấy một số liên kết có liên quan có thể:
https://github.com/mongodb/node-mongodb-native/issues/621
Why gridfs get isn't working on file id (ObjectId) only by filename
nếu tôi thay thế "filename" với "5140392659851df70b000001", nó hoạt động: 'var readstream = gfs.createReadStream ('5140392659851df70b000001')'. Tôi đoán lý do có liên quan đến việc thiết lập khóa? – LKS
Bạn cũng có thể xem xét việc triển khai luồng trình điều khiển http://mongodb.github.com/node-mongodb-native/api-generated/gridstore.html#stream – christkv
Rất tò mò, bạn có đang lưu trữ tham chiếu đến tệp trong đó không một mongoose tạo ra tài liệu? Tôi đang xem xét sử dụng GridFS và đã tự hỏi làm thế nào folks thực hiện nó. – Leonidas