multer上传文件并在前台显示

在此用的是ejs的模板,在index.ejs中实现页面的显示

index.ejs

<%- include header  %>
<p>
	标题:<%= post.title %>
	<p>图片:<%= post.src %></p>
	<img src= <%= post.src %> alt="图呢??快给我!!">
	<!-- 这里的路径根目录都是指的public文件夹 -->
</p>
<%- include footer  %>

routes/index.js文件

var multer = require('multer');
....//这里只贴跟multer有关的代码,关于multer的用法,可以参考本博客中的另一篇
var storage = multer.diskStorage({
	destination:function(req,file,cb){//设置存储目标路径
		cb(null,path.join(path.resolve('./'),"/public/images"))
	},//cb指的是callback
	filename:function(req,file,cb){
		cb(null,file.fieldname+"-"+ Date.now())
	}//为啥加了这个filename之后会出现两个文件呢?
});
var upload = multer({storage:storage});
....
//post请求可以这样写
app.post('/upload',upload.single("file"),function(req,res,next) {
		var filename = req.file.filename
		console.log(filename+"文件名");
		res.redirect('/upload');/*如果在此处不做操作的话,nodejs会重复执行post到的upload请求
							导致在目标文件夹下生成多个文件(一般是两个,相当于/upload页刷新了一遍)*/
	});

如果要实现同步存储到数据库中,此处用mongoose实现的,mongoose的model,entity什么的就不仔细说了

app.post("/post",upload.single("file"),function(req,res){
		var filename = (req.file.filename);
		var issue = {
			username:req.session.user,
			title:req.body.title,
			post:req.body.post,
			time:new Date(),
			src:path.join("/images",filename)
			    //注意,此处的路径一定要弄清楚,它和上面storage中的路径不是一样的
		};


你可能感兴趣的:(multer上传文件并在前台显示)