我遵循了一个关于如何使用multer上传节点js中的文件的教程,并且不久前才开始学习节点j并表达js所以我是一个相当初学者。作为教程的结果,当我点击我的index.ejs中的提交来上传图像/音乐文件时,我可以在我的终端中看到文件已经上传了详细信息,当我检查我的./public/uploads时文件夹,文件也放在那里。
我现在想知道的是,如何获取数据并将其放入我的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 :(得分: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('/');
}
})
});
模型
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;
根据死亡笔记的说法,这对我有用。
答案 1 :(得分:0)
您要做的是利用文件系统存储机制。 Multer为您提供了选择保存文件目的地的选项,您可以在文件存储后提取文件的名称(操作选项也在那里),将文件的URL传递给您的特定功能,然后保存其位置在你的mongo db中。
检索图片的网址并执行所需操作。
代码示例
app.post('/yourlink', fileuploadfunc.single('filename'), function1, routename.functionname);
function1 - 在上传完成后调用 routename - 在执行function1后调用
如果您没有使用路线,那么在功能1中,您可以做任何您想做的事。