Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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
Node.js 在存储二进制文件后,如何从MongoDB中检索它?_Node.js_Mongodb - Fatal编程技术网

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