存储图像并从MongoDB中调用它们

时间:2017-08-17 18:42:44

标签: node.js mongodb file-upload mongoose

我在网上浏览了一下,只获得了一些在测试代码中工作的方法,但从未在我的实际代码中使用过。我试图让用户以.jpg格式上传图像,然后我想稍后调用它来显示。这是我到目前为止所得到的。

fs = require("fs");
multer= require("multer");

app.use(multer({ dest: "./uploads/:id",
 rename: function (fieldname, filename) {
 return filename;
 },
}));

然后从我正在使用的表单中提取文件:

image: req.body.image

至于将它放入数据库的代码我不确定,这是我提出的,但不太确定它是否可行。我也很无能把它放到我已经拥有的其他形式的更大的路线中。

这是小代码:

app.post("/api/photo",function(req,res){
 var Startup = new Startup();
 Startup.img.data = fs.readFileSync(req.files.userPhoto.path);
 Startup.img.contentType = "image/jpg";
 Startup.save();
});

这是表格其余部分的工作(图像除外)路线代码。

// CREATE add new startup to database
app.post("/startup-submit", function(req, res) {
   // Get data from form
  I create the variables here, removed as too much code and code for the image draw is above.    
   //Pass data through | Write better explaination later
   var newStartup = {about_startup: about_startup, social_media: social_media, about_founder: about_founder};
   Startup.create(newStartup, function(err, newlyCreatedStartup){
       if(err){
           console.log(err);
       } else {
           // Redirect back to show all page
           res.redirect("/startups");
       }
   });
});

我知道小型和大型代码的路径路径没有对齐,但我正在使用它进行测试。

如何对此代码进行网格化和修复,以便允许我将图像/文件上传到我的数据库?

然后我怎么称它为使用EJS的src。它只是">这是我想出的最好的。我相信它远非正确。

1 个答案:

答案 0 :(得分:0)

关注documentation

(1)dest是存储文件的地方。 ./uploads/:id看起来不是一个有效的目的地。

(2)你在哪里获得rename选项?

(3)不要将实际图像存储在数据库中。只需存储文件名。

看起来应该更像

var fs = require("fs"),
    multer = require("multer");

var upload = multer({
    storage: multer.diskStorage({
        destination: function (req, file, cb) {
            // here is where you would add any extra logic to create directories
            // for where you will upload your file
            cb(null, './uploads')
        },
        filename: function (req, file, cb) {
            // here is where you would add any extra logic to rename your file
            cb(null, file.fieldname);
        }
    })
});

app.post("/api/photo", upload.single('fieldname'), function (req, res, next) {
    // at this point, the file should have been uploaded
    // you can get info about your file in req.file
    console.log(req.file);

    var startup = new Startup();
    startup.img.data = req.file.filename;
    startup.img.contentType = req.file.mimetype;
    startup.save(function (err) {
        if (err) return next(err);
        // send response
    });
});

如果您要创建目录,可能会发现fs-extra有用,特别是fs.mkdirs() /this/path/does/not/exist