2016-06-18 51 views
2

multerを使用してノードjs内のファイルをアップロードする方法についてのチュートリアルに続き、ノードjを学習し始めたばかりで、jsもあまりにも早く始まっていないので、私はかなり初心者です。チュートリアルの結果、index.ejsでsubmitをクリックして画像/音楽ファイルをアップロードすると、そのファイルが詳細と共にアップロードされていることと、./public/uploadsを確認すると端末に表示されますフォルダには、ファイルもそこに置かれています。multerファイル(nodejs)をMongoデータベースにアップロード

ここで私が知りたいのは、そのデータを取得してmongoデータベースに保存する方法と、これらの画像を表示したり、これらの音楽ファイルをindex.ejsで再生するにはどうすればいいですか?私はまだマングースを設定していないが、私はなるだろう。これまでの私のコード:

マイapp.js何をしようとする

var express = require('express'); //to require express.js 
var multer = require('multer'), //to require multer for uploading photos 
    bodyParser = require('body-parser'), //to require body-parser to grab json form data 
    path = require('path'); 

var upload = multer({ dest: 'public/uploads/' }) //giving upload a destination directory 

var app = express(); //to use express 
app.use(bodyParser.json()); 
app.set('views', path.join(__dirname, 'views')); 
app.use(express.static(__dirname + '/public')); //to use style.css 
app.set('view engine', 'ejs'); //to use ejs as template language 
// app.use(bodyParser.urlencoded({ extended: false })); //to use body parser 

app.get('/', function(req, res){ //using express for routing and printing out content 
    res.render('index'); //render it in html. In ejs, display what we want to display 
}) 

app.post('/', multer({ dest: './public/uploads/'}).single('upl'), function(req,res){ 
    console.log(req.body); //form fields 
    console.log(req.file); //form files 
    res.status(204).end(); 
}); 

app.listen(3000,function(){ //using express to load the server 
    console.log('Pulse on port 3000!'); 
}) 

Index.ejs

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <title>Pulse</title> 
    </head> 
    <body> 

    <h1> Hi </h1> 

    <form action="/" enctype="multipart/form-data" method="post"> 
     <input type="text" name="title"> 
     <input type="file" name="upload"> 
     <input type="submit" value="Upload"> 
    </form> 


    </body> 

</html> 

答えて

0

は、ファイルシステムのストレージメカニズムを利用することです。 Multerはファイルを保存する場所を選択するオプションを提供します。ファイルの名前を抽出することもできます(操作オプションもあります)。ファイルが保存された後、ファイルのURLを特定の関数に渡し、そこから場所を保存しますあなたのmongo dbで。

イメージのURLを取得し、必要な処理を行います。

コードサンプル

app.post('/yourlink', fileuploadfunc.single('filename'), function1, routename.functionname); 

はfunction1 - アップロードが routenameを完了した後、これが呼び出された - あなたはあなたができることはfunction1で、その後のルートを利用していないしている場合はfunction1

の実行後に呼び出されますあなたが望むものなら、なんでも。

2
var storage = multer.diskStorage({ 
destination: function (req, file, cb) { 
cb(null, './uploads/'); 
    }, 
filename: function (req, file, cb) { 
    var originalname = file.originalname; 
    var extension = originalname.split("."); 
    filename = Date.now() + '.' + extension[extension.length-1]; 
    cb(null, filename); 
    } 
}); 

router.post('/', multer({storage: storage, dest: './uploads/'}).single('uploads'), function(req,res){ 
    var music = new Music ({ 
    fieldname: req.file.fieldname, 
    originalname: req.file.originalname, 
    encoding: req.file.encoding, 
    mimetype: req.file.mimetype, 
    destination:req.file.destination, 
    filename: req.file.filename, 
    path: req.file.path, 
    size: req.file.size 
    }) 
    music.save(function(err){ 
    if (err){console.log(err)} 
    else { 
     res.redirect('/'); 
    } 
    }) 
}); 

何deathnoteに基づくモデル

var mongoose = require('mongoose'); 

var musicSchema = new mongoose.Schema({ 
    fieldname: String, 
    originalname: String, 
    encoding: String, 
    mimeptype: String, 
    destination: String, 
    filename: String, 
    path: String, 
    size: Number, 
    created_at: Date, 
    updated_at: Date 
}); 
var Music = mongoose.model('Music', musicSchema); 

module.exports = Music; 

が、これは私のために働いた、と述べました。

関連する問題