2016-11-16 41 views
0

我想在我的博客文章中上傳圖片,但出現錯誤,圖片在文件夾中顯示,但是當我看到數據庫時,noimage.png設置爲默認... 即時通訊使用Multer,有我的代碼:Multer正在本地上傳我的圖片,但不在我的數據庫中

Addpost.ejs

<% include ./partials/header %> 
<form method="POST" action="/posts/add" enctype="multipart/form-data"> 
    <div class="form-group"> 
     <label>Title</label> 
     <input class="form-control" name="title" type="text"> 
    </div> 
    <div class="form-group"> 
     <label>Category</label> 
     <select class="form-control" name="category"> 
      <% categories.forEach(function(category){ %> 
       <option value="<%= category.title %>"><%= category.title %></option> 
      <% }) %> 
     </select> 
    </div> 
    <div class="form-group"> 
     <label>Body</label> 
     <textarea class="form-control" name="body"></textarea> 
    </div> 
    <div class="form-group"> 
     <label>Main Image</label> 
     <input class="form-control" name="file" type="file"> 
    </div> 
    <div class="form-group"> 
     <label>Author</label> 
     <select class="form-control" name="author"> 
      <option value="Arsen Cenko">Arsen Cenko</option> 
      <option value="John Doe">John Doe</option> 
     </select> 
    </div> 
    <input class="btn btn-default" name 
    ="submit" type="submit" value="save"> 
</form> 
<script src="/app.js"></script> 

PostSchema:

var mongoose = require("mongoose") 
var postSchema = new mongoose.Schema({ 
title: String, 
created: {type: Date, default: Date.now}, 
category: [ 
    { 
     type: mongoose.Schema.Types.ObjectId, 
     ref: "Category" 
    } 
], 
body: String, 
file: String }) 
module.exports = mongoose.model("Post", postSchema); 

Post.js路線

var express = require("express"); 
var router = express.Router(); 
var Post = require("../models/post"); 
var Category = require("../models/category"); 
var path = require('path'); 
var multer = require('multer'); 
var storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
    cb(null, './public/images/uploads/') 
    }, 
    filename: function (req, file, cb) { 
    cb(null, Date.now() + path.extname(file.originalname)) 
    } }); 
var upload = multer({ storage: storage }); 


router.get("/add", function(req, res) { 
    Category.find({}, function(err, categories){ 
     if(err){ 
      console.log(err); 
     } else{ 
      res.render("addpost", { 
       title: "Add Post", 
       categories: categories 
      }) 
     } 
    }) 
}) 


router.post("/add", upload.single('image'), function(req, res){ 
var title  = req.body.title; 
var category = req.body.category; 
var body  = req.body.body; 
var author  = req.body.author; 

if(req.files && req.files.image){ 
    var imageOriginalName = req.files.image.originalname; 
    var imageName = req.files.image.fieldname; 
    var imageMime = req.files.image.mimetype; 
    var imagePath = req.files.image.path; 
    var imageExt = req.files.image.extension; 
    var imageSize = req.files.image.size; 
} else { 
    var imageName = "noimage.png"; 
} 

var newPost = {title:title, category:category, body:body, author:author, image:imageName}; 

Post.create(newPost, function(err, newPost){ 
    if(err){ 
     console.log("Error"); 
    } else{ 
     res.redirect("/"); 
    } 
}) 

})

謝謝:)

+0

尋求調試幫助的問題(「爲什麼這個代碼不工作?」)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現問題所需的最短代碼。沒有明確問題陳述的問題對其他讀者無益。請參閱:[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 – Marcs

回答

0

嘿根據使用upload.single('image')將獲得 「req.file」 文件文檔

https://github.com/expressjs/multer

不在「req.files」

我認爲這是你如果失敗並跳轉到其他情況的原因。你不能像req.file.image.filename那樣訪問它,你可以通過req.file.filename來訪問它。由於它已經是一個「單一」文件。嘗試控制檯記錄req.file以瞭解您正在獲取的內容。

更新我認爲,錯就錯在你的HTML

<input class="form-control" name="file" type="file"> 

應該

<input class="form-control" name="image" type="file"> 

的HTML的name屬性應該是相同upload.single的字符串。 所以你的情況

upload.single('image') 

現在,您將收到req.file文件。

希望它有幫助。

+0

我已經試過這種方式仍然是一樣的! –

+0

檢查我更新的答案。 –

相關問題