Node.js 在存储二进制文件后,如何从MongoDB中检索它?
我存储的文件类似于以下内容:Node.js 在存储二进制文件后,如何从MongoDB中检索它?,node.js,mongodb,Node.js,Mongodb,我存储的文件类似于以下内容: var pdfBinary = fs.readFileSync("myfile.pdf"); var invoice = {}; invoice.pdf = new mongo.Binary(pdfBinary); collection.findOne({}, function(err, retrievedPDF) { fs.writeFile("myretrieved.pdf", retrievedPDF.pdf.buffer, func
var pdfBinary = fs.readFileSync("myfile.pdf");
var invoice = {};
invoice.pdf = new mongo.Binary(pdfBinary);
collection.findOne({}, function(err, retrievedPDF) {
fs.writeFile("myretrieved.pdf", retrievedPDF.pdf.buffer, function(err) {
....
});
});
{ pdf:
{ _bsontype: 'Binary',
sub_type: 0,
position: 0,
buffer: <Buffer > },
_id: 53af545681a59758611937d7 }
然后,我将上述文档插入MongoDB。然后,我尝试检索它,如下所示:
var pdfBinary = fs.readFileSync("myfile.pdf");
var invoice = {};
invoice.pdf = new mongo.Binary(pdfBinary);
collection.findOne({}, function(err, retrievedPDF) {
fs.writeFile("myretrieved.pdf", retrievedPDF.pdf.buffer, function(err) {
....
});
});
{ pdf:
{ _bsontype: 'Binary',
sub_type: 0,
position: 0,
buffer: <Buffer > },
_id: 53af545681a59758611937d7 }
它显示为一个零字节文件。如果I console.log存储的文件如下所示:
var pdfBinary = fs.readFileSync("myfile.pdf");
var invoice = {};
invoice.pdf = new mongo.Binary(pdfBinary);
collection.findOne({}, function(err, retrievedPDF) {
fs.writeFile("myretrieved.pdf", retrievedPDF.pdf.buffer, function(err) {
....
});
});
{ pdf:
{ _bsontype: 'Binary',
sub_type: 0,
position: 0,
buffer: <Buffer > },
_id: 53af545681a59758611937d7 }
{pdf:
{{u bsontype:'二进制',
子类型:0,
位置:0,
缓冲区:},
_id:53af545681a59758611937d7}
我查阅了文档,发现有些混乱。我做错了什么,无法存储/检索文件?您试图读取一个空文件。检查从磁盘加载文件的代码,并检查PDF文件 空二进制文件如下所示:
> console.log(new mongodb.Binary(""));
{ _bsontype: 'Binary',
sub_type: 0,
position: 0,
buffer: <Buffer > }
我添加了
console.log() 看来这次拯救中肯定出了问题。下面是一个完整的工作示例:
var fs = require('fs'),
mongo = require('mongodb'),
MongoClient = mongo.MongoClient,
ObjectId = mongo.ObjectID,
Binary = mongo.Binary;
MongoClient.connect('mongodb://localhost/fs',function(err,db) {
var name = "receptor.jpg";
var binData = fs.readFileSync(name);
var object = {};
object.name = name;
object.data = new Binary(binData);
db.collection("test").findAndModify(
{ name: name },
[],
object,
{ upsert:true },
function(err,data,newObj) {
if ( data == null ) {
console.log(newObj);
} else {
console.log(data);
}
db.collection("test").findOne({ name: name },function(err,data) {
fs.writeFile("ouput.jpg",data.data.buffer,function(err) {
console.log("done");
});
});
});
});