2017-03-03 7 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

2つの問題があります。

最初に、フォームにenctype属性が設定されていません。ファイルの提出にはenctype="multipart/form-data"が必要です。

2番目:multerが必要ですが、使用していません。私はこれがされている知っている

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

写真を1枚追加したいと思います。私のフォームタグにenctype = "multipart/form-data"を追加する必要がありますか? また、私の主な問題は、私がNodejsとMulterを始めとしていることです。だから私は、アップロードフォルダにアップロードするために、フォームによって提出されたファイルをcreateUserに使用する方法を知らないのですか? ありがとうございます –

+0

このエラーが発生しました。TypeError:app.use()にミドルウェア機能が必要です –

+0

@DinaMakled自分の編集を参照してください。 –

0

:あなたは、このようcreateUser()内のファイルにアクセスすることができ(.array()または.fields()のように、または別の方法(see documentation)と)

をこの

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

を追加2ヶ月前に投稿されましたが、同じ問題を抱えているユーザーには、

私はあなたがenctyフォームにPE = "マルチパート/フォームのデータ"

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

とあなたのrouter.routeであなたは(upload.singleを追加する必要があります)またはupload.any()

router.post('/regUser', upload.single(), userController.createUser); 
関連する問題