在Node.js和Express中上传Multer图片 [英] Multer image upload in Nodejs and Express

查看:63
本文介绍了在Node.js和Express中上传Multer图片的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在尝试使用Multer上传图像.这就是我走了多远.我尝试了多种方法,但似乎无法使其正常工作.我不知道如何使用Multer以如下所示的格式在我的createUser函数中上传图像.

I've been trying for days to upload an image using Multer. This is how far I got. I tried multiple things, and can't seem to make it work. I don't know how to use Multer to upload an image in my createUser function in the format shown below.

我的"server.js"文件:

My ' server.js ' file:

var express = require('express');
var multer = require('multer');
var upload = multer({dest: 'uploads/'});
var router = require('./app/routes');
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var session = require('client-sessions');
var DB_URI = "mongodb://localhost:27017/portfolio";
var app = express();
var path = require('path');
var fs = require('fs');
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({extended:false}));
app.use(express.static(__dirname+ '/public'));
app.use(session({
  cookieName: 'session',
  secret: 'random_string_goes_here',
  duration: 30 * 60 * 1000,
  activeDuration: 5 * 60 * 1000,
}));

mongoose.connect(DB_URI);
app.use(router);

app.listen(8080, function(){
    console.log("server is listening on port 8080");
})

我的"routes.js"

My ' routes.js '

var express = require('express');
var router = express.Router();
var projectController = require('./controllers/projectController');
var userController = require('./controllers/userController');
router.post('/regUser', userController.createUser);

我的'index.ejs'

My ' index.ejs '

<form class="form inv" method="POST" action="/regUser" id="reg_form">
          <h3 style="margin-bottom:40px;">Register</h3>
          <!-- <input type="file" name="file"/> -->
          <input type="text" class="form-control" name="name" placeholder="Name"/>
          <input type="text" class="form-control" name="username" placeholder="Username"/>
          <input type="text" class="form-control" name="email" placeholder="Email"/>
          <input type="password" class="form-control" name="password" placeholder="Password"/>
          <input type="file" name="userPhoto"/>
          <input type="submit" class="btn btn-default" value="Submit"/>
        </form>

我的userController.js

My userController.js

createUser: function(req, res){
//add code to create user AND upload image
}

推荐答案

有两个问题.

首先:您的表单没有设置enctype属性. enctype ="multipart/form-data" 是文件提交正常工作所必需的.

First : your form does not have the enctype attribute set. enctype="multipart/form-data" is required for file submission to work.

第二个:您需要 multer ,但是您没有使用它.添加

Second : you require multer, but you are not using it. Add this

app.use(multer({ dest: '/tmp/'}).single('userPhoto'))

(或其他方法(参见文档),例如 .array() .fields())

(or with another method (see documentation), like .array() or .fields())

然后您可以像这样在 createUser()中访问文件:

You could then access the file in createUser() like this:

createUser: function(req, res){
    console.log(req.file); // this displays the userPhoto's properties
    fs.readFile(req.file.path, function (err, data) {
        // do something with the file data
    }
}

这篇关于在Node.js和Express中上传Multer图片的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆