2015-09-05 120 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}`); 
       }); 
      }); 
     }) 
}); 
相關問題