2015-09-05 264 views
0

我正在从这个yeoman.io生成器搭建一个MEAN堆栈脚手架的站点:https://github.com/DaftMonk/generator-angular-fullstack,我试图以二进制形式上传一些图像文件到MongoDB。这里是我的项目混帐回购协议:如何通过Mongoose在MongoDB中存储二进制数据(PNG)?

https://github.com/peter-atlanta/personal-site

我跟着@ aheckmann的GIST的嘴脸:https://gist.github.com/aheckmann/2408370

,但我一直对我有多么的文件不能被发现收到错误,即

Error: ENOENT, no such file or directory '../../client/assets/images/github.png' 
    at Error (native) 
    at Object.fs.openSync (fs.js:500:18) 
    at Object.fs.readFileSync (fs.js:352:15) 
    at Immediate.<anonymous> (/Users/peterward/petergrayward/blog/server/config/imageToMongo.js:43:21) 
    at Immediate._onImmediate (/Users/peterward/petergrayward/blog/node_modules/mongoose/node_modules/mquery/lib/utils.js:137:16) 
    at processImmediate [as _immediateCallback] (timers.js:358:17) 

由此可见,虽然,有问题的PNG位于该目录中,我甚至已经试过目录服务器端移动无济于事。

为什么找不到文件/目录入口点?

回答

0

当涉及到在MongoDb中存储小文件时,许多依赖于Mongoose的答案也取决于使用GridFS。如果你可以简单地将文件存储在MongoDB 没有依靠GridFS和Mongoose,然后尝试以下操作。 (这个答案在TypeScript中我认为比较容易阅读,但是如果需要的话,我可以发布传译的JavaScript)。

import mongodb = require("mongodb"); 
const URI = 'mongodb://...'; 
var dbPromise = new Promise<mongodb.Db>(function (resolve, reject) { 
    mongodb.MongoClient.connect(URI, function (err, db) { 
     resolve(db); 
    }); 
}); 
import express = require("express"); 
var app = express(); 
import path = require("path"); 
import multer = require("multer"); 
var upload = multer({ dest: 'uploads/' });//saving files on filesystem seems to be a requirement 
import fs = require("fs");  
interface IFile { 
    name : string; 
    binary : mongodb.Binary; 
} 

//<input type="file" type="file" id="png1" name="png1" /> 
app.post("/file-upload", upload.single("png1"), function (req, res) { 
    let f = req.file; 
    fs.readFile(f.path, function (err, buffer) { 
      dbPromise.then(db => { 
       let file : IFile = { 
        name: f.originalname, 
        binary: new mongodb.Binary(buffer) 
       }; 
       db.collection('files').insertOne(file, function(err, result) { 
        if (err) { 
         res.json(500, err); 
        } 
        console.log(`${result.insertedId} ${result.insertedCount}`); 
       }); 
      }); 
     }) 
}); 
相关问题