博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
node.js,后台数据创建相册form表单上传图片
阅读量:4146 次
发布时间:2019-05-25

本文共 4662 字,大约阅读时间需要 15 分钟。

form表单上传图片

在这里插入图片描述

app.js

//express  ejs   formidable  var express = require('express');var app = express();var router = require('./router');var path = require('path');var bodyParser = require('body-parser');app.use(bodyParser.urlencoded({ extended: false }));//设置post请求的编码方式//设置ejs为模板引擎app.set('view engine','ejs');//可以把上传的图片的目录 设置为静态资源app.use(express.static(path.join(__dirname,'upload')));//一般情况下  我们并不会在入口文件中写业务代码//渲染首页app.get('/',router.index);//上传相册页app.get('/uploadPic',router.uploadPic);//创建相册页app.get('/mkPic',router.mkPic);//相册详情页  可以通过路由传参的方式  来去知道当前页面应该显示哪些内容app.use('/picDetails',router.picDetails);//app.get('/picDetails/:id',router.picDetails);//相册名称的接口app.get('/getPicName',router.getPicName);//创建相册名称的接口app.post('/createPicName',router.createPicName);//上传图片的接口app.post('/uploadppic',router.uploadppic);app.use('*',router.err)//匹配404页面app.listen(3001,function () {	console.log('服务器已启动。。。')})

router.js

var fs = require('fs');var queryString = require('querystring');var formidable = require('formidable');var timeStamp = require('time-stamp');var path = require('path');var tips = require('./tipsConfig')//首页的渲染exports.index = function (req,res) {	//查找到相应的数据obj	fs.readdir('./upload',function (err,arr) {		if(err){			throw err;		}		console.log(arr)		//ejs模板的数据  对象的格式  {key:val}		res.render('index',{arr:arr});		//{arr:[ '美女', '美女0', '美女1', '美女123', '默认相册' ]}	})	//res.render('index');}//uploadPicexports.uploadPic = function (req,res) {	fs.readdir('./upload',function (err,arr) {		if(err){			throw err;		}		console.log(arr)		//ejs模板的数据  对象的格式  {key:val}		res.render('uploadPic',{arr:arr});		//res.render('index',{arr:arr});		//{arr:[ '美女', '美女0', '美女1', '美女123', '默认相册' ]}	})	}//mkPicexports.mkPic = function (req,res) {	res.render('mkPic');}//picDetails  use中间件//  /picDetails/默认相册exports.picDetails = function (req,res) {	//req.path  拿到后面所传递的参数    默认相册      /默认相册	//req.path	var obj;	var path = queryString.unescape(req.path);	console.log(path);//   /美女	fs.readdir('./upload'+path,function (err,arr) {		if(err){			throw err;		}		console.log(arr);//[ '02 - 副本.jpg', '02.jpg' ]		obj = {			path:path,			arr:arr		}		res.render('picDetails',obj);	})	//ejs模板中 需要  相册的具体目录  还有该目录下所有图片	//数据  对象  {}	}//getPicName  接口exports.getPicName = function (req,res) {	fs.readdir('./upload',function (err,arr) {		if(err){			throw err;		}		console.log(arr);		//后台.send  发送给前端  是一个json数据的时候 		//那么这个get路由请求  就是给前端的一个接口来的		res.send(arr);	})}//createPicNameexports.createPicName = function (req,res) {	console.log(req.body)//{ picName: '美女' }	//判断当前想要创建的目录 是否已经存在	fs.exists('./upload/'+req.body.picName,function (isMake) {		if(isMake){			console.log('当前相册名称已经存在,不允许重复创建')			//res.render('msg')			res.send('不成功')		}else{			console.log('当前相册名称不存在,允许创建')			fs.mkdir('./upload/'+req.body.picName,function (err) {				if(err){					throw err;				}				console.log('目录已经成功创建')				res.send('成功')				//res.render('msg')			})					}	})}//uploadppicexports.uploadppic = function (req,res) {	var form = new formidable.IncomingForm(); 	form.uploadDir = "./uploadBAck";//定义上传图片的路径 	form.keepExtensions = true;//是否保留扩展名 	//fields  非文件数据 	//files  文件数据来的    form.parse(req, function(err, fields, files) {      console.log(fields.picName);//{ picName: '美女' }      console.log(files);      console.log(files.upPic.path);//一开始存放图片的地址      //uploadBAck\upload_e6acd623e4bc0432304ca4682af605d6.jpg      //fs.rename()      //时间戳+随机数+扩展名      var time = timeStamp('YYYYMMDD');      var ran = parseInt(Math.random()*4578475 + 329473847);      var ext = path.extname(files.upPic.path);           // console.log(time+ran+ext);新的名字     var oldName = path.join(__dirname,files.upPic.path);     var newName = path.join(__dirname,'upload',fields.picName,time+ran+ext);     fs.rename(oldName,newName,function (err) {     	if(err){     		throw err;     	}     	console.log('成功上传图片');     	//res.send('您已经成功上传了图片')     	res.render('tips',tips.tips.upSuc);     })         });}//errexports.err = function (req,res) {	res.status(404).render('tips',tips.tips.err);}

tipsconfig.js

exports.tips = {	err:{		msg:'404,当前页面不存在',		path:'/',		text:'首页'	},	upSuc:{		msg:'上传成功',		path:'/',		text:'首页'	}}

index.ejs

						

首页

上传 创建相册

相册列表

<% for(var i=0;i
<%= arr[i] %> <% } %>

mkpic.ejs

		

创建相册

相册名称:

picDetails.ejs

				

相册详情

<% for(var i=0;i
<% } %> <% if(arr.length == 0){ %>
当前相册还没有上传图片 <% } %>

tips.ejs

		<%= msg %>,3秒后自动返回首页		

uploadpic.ejs

		

上传相册

选择上传的相册名:

转载地址:http://wwcti.baihongyu.com/

你可能感兴趣的文章
[IDEA]习惯用的idea快捷方法
查看>>
【SpringMVC整合MyBatis】springmvc异常处理-全局异常处理器开发
查看>>
spring cloud的的服务消费者
查看>>
特征脸技术及其在人像检测应用研究
查看>>
spring mvc 的jpa JpaRepository数据层 访问方式汇总
查看>>
Lombok用法
查看>>
Windows下用Nginx配置https服务器
查看>>
spring quartz 的定时器cronExpression表达式写法(转载)
查看>>
环境安装准备
查看>>
Freemaker使用记录
查看>>
1分钟通晓C语言的4种预定义符号
查看>>
浅析宏和函数的区别与联系
查看>>
浅析程序执行的整个过程
查看>>
linux线程剖析(Part1)—1个“假“的tcb
查看>>
linux线程互斥与同步(part1)—互斥锁(mutex)的原理及其实现机制
查看>>
线程剖析(part2)—线程控制及线程属性
查看>>
线程互斥与同步(part2)—互斥锁(Mutex)的“cp”:条件变量(Condition Variable)
查看>>
线程互斥与同步(part4)—终结篇:“一股清流”—读写锁(rwlock)
查看>>
linux下gdb的安装方法
查看>>
SIGCHLD信号与进程异步等待
查看>>