一、准备知识
var path = require("path");
var fs = require("fs");
(1)path
__dirname //指的是当前文件夹
path.resolve(__dirname, '..’) //父一级路径
(2)fs
var files = fs.readdirSync(path); //读取路径下的所有文件
fs.unlink(path, (err) => {}); //删除某个文件
fs.mkdir(path,(err) => {});//添加文件
fs.rename(oldpath,newpath,function (err) {}); //重命名文件
二、案例
(1)一个例子,维护脚本,删除多余的文件
var path = require("path");
var fs = require("fs");
var qcfv = require("qcfv");//自己写的表单验证
//删除/public/img里边的不达标文件
exports.clearPhotos = function(){
var path = __dirname + "/public/img";
//读取路径下所有的文件,这里要用到fs
var files = fs.readdirSync(path);
files.forEach(item =>{
if(!qcfv.isPicture(item)){
//拼接出对应文件的完整路径
var singlePath = path+"/"+item;
fs.unlink(singlePath, (err) => {
if (err) throw err;
console.log('文件已删除');
});
}
});
}
(2)添加文件,这里是上传图片
var moment = require("moment");
var formidable = require('formidable');
var path = require("path");
var fs = require("fs");
var qcfv = require("qcfv");
……..
var form = new formidable.IncomingForm();
//__dirname指的是当前文件夹,我们找到父一级
form.uploadDir = path.resolve(__dirname, '..')+'/public/img/';
form.parse(req, function(err, fields, files) {
//生成时间文件挂载在files,提交内容挂载在fields上
var oldpath = files.goodsimage.path;
lpost = fields.post;
gtitle = fields.gtitle;
//生成时间
var time = moment(new Date).format('YYYYMMDDHHmmss');
//生成随机数
var rand = parseInt(Math.random() * 8999 +10000);
//拿到拓展名
var extname = path.extname(files.goodsimage.name);
//新的地址
var newpath = path.resolve(__dirname, '..') + '/public/img/'+time+rand+extname;
//然后给旧地址的文件改名
var iserror = false;
fs.rename(oldpath,newpath,function (err) {
//改名失败,删除文件的时候爆对应文件名,文件不存在
if(err){
fs.unlink(oldpath, (err) => {
if (err) throw err;
console.log('文件已删除');
});
return res.redirect('/u/' + currentUser.name);
}else{
//将路径字符串按照path分隔符拆开,然后拿到最后一个,图片的名字和后缀
goodsimage = newpath.split(path.sep).pop();
var istitle = qcfv.isEmptyStr(gtitle);
var iscontent = qcfv.isEmptyStr(lpost);
//先判断表单内容全不全,不全删除图片,不做存储
if(istitle || iscontent || !qcfv.isPicture(goodsimage)){
if(istitle){req.flash("error","请输入商品名称");}
if(iscontent){req.flash("error","请输入商品描述");}
if(!qcfv.isPicture(goodsimage)){req.flash("error","请选择图片”);}
//将生成的文件删除
fs.unlink(newpath, (err) => {
if (err) throw err;
console.log('文件已删除');
});
return res.redirect('/u/' + currentUser.name);
}
var post = new Post(currentUser.name,lpost,null,gtitle,goodsimage);
post.save(function(err){
//如果有问题,就重定向到首页
if(err){
req.flash('error',err);
return res.redirect('/');
}
//不然就是发表成功,我们定向到用户页
req.flash('success','发表成功');
//调用user的路由,在那里我们能通过get方法获取数据,做render传值操作
res.redirect('/u/' + currentUser.name);
});
}
});
});