2017-03-03 4 views
1

나는 멀터 (Multer)를 사용하여 이미지를 업로드하려고 며칠을 보냈습니다. 이것은 내가 얻은 것입니다. 나는 여러 가지 일을 시도해 보았지만 제대로 작동하지 않는 것처럼 보였다. Multer를 사용하여 createUser 함수에서 아래 표시된 형식으로 이미지를 업로드하는 방법을 모르겠습니다.Nodejs 및 Express의 멀터 이미지 업로드

내 'server.js'파일 :

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'

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'

<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

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

그곳에? – Deep

답변

1

두 가지 문제점이 있습니다.

첫 번째로 : 양식에 enctype 속성이 설정되어 있지 않습니다. 파일 제출에 작동하려면 enctype="multipart/form-data"이 필요합니다.

두 번째 : multer이 필요하지만 사용하고 있지 않습니다. 추가이

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

(또는 .array() 또는 .fields() 같은 다른 방법 (see documentation)로) 당신은 다음과 같이 createUser()에서 파일을 액세스 할 수

:

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 
    } 
} 
+0

사진 한 장만 추가하고 싶습니다. 그래서 여전히 양식 태그에 enctype = "multipart/form-data"를 추가해야합니까? 또 다른 주요 문제는 Nodejs와 Multer를 처음 접하는 것입니다. 따라서 양식을 통해 제출 된 파일을 createUser에 업로드하여 업로드 폴더에 업로드하는 방법을 모르겠습니다. 미리 감사드립니다. –

+0

이 오류가 발생합니다. TypeError : app.use()에 미들웨어 기능이 필요합니다. –

+0

@DinaMakled 제 편집을 봅니다. –

0

내가 아는이있다 두 달 전에 게시했지만 동일한 문제가 발생하는 사용자에게

나는 encty를 추가해야한다고 생각합니다. 당신이지고 어떤 오류 PE는 = 당신이 upload.single 추가해야합니다 양식

<form action="url" method="post" enctype="multipart/form-data"> 

로하고 router.route에서 "다중/폼 데이터"() 또는 upload.any()

router.post('/regUser', upload.single(), userController.createUser);