fromidable:一个Node.js模块,用于解析表单数据,尤其是文件上传。
一、下载
cnpm install fromidable -S
二、获取
const {IncomingForm}=require("formidable");
const form=new IncomingForm();
三、创建服务器,然后通过GET方式获取到URL,继而找到我们在前台输入的路径
var pathname = url.parse(req.url,true).pathname;
四、创建一个名为upload的HTML,通过form实现图片上传
<form action="/upload" method="post" enctype="multipart/form-data">
姓名:<input type="text" name="username"><br />
年龄:<input type="text" name="age"><br />
图像:<input type="file" name="img"><br />
<input type="submit" value="提交"><br />
</form>
五、通过pathname可以判断用户是否提交信息。
if(pathname == "/upload"){
form.encoding = "utf-8";
form.uploadDir = uploadDir;
form.keepExtensions = true;// 保留扩展名
form.parse(req,(err,params,file)=>{
const picInfo = file[picName];
if(picInfo.size <= 0){
// 删除空文件
fs.unlink(picInfo.path,err=>{
cb({
ok:2,
msg:"未上传图片",
params
})
})
}else{
// 允许上传的扩展名
const extArr = [".gif",".png",".jpg"];
const extname = path.extname(picInfo.path).toLowerCase();// 得到扩展名
if(extArr.includes(extname)){
const newPicName = Date.now()+extname;
fs.rename(picInfo.path,uploadDir+"/"+newPicName,err=>{
params.newPicName = newPicName;
cb({
ok:1,
msg:"上传图片成功",
params
})
})
}else{
fs.unlink(picInfo.path,err=>{
cb({
ok:3,
msg:"请选择正确的图片格式.gif,.png,.jpg"
})
})
}
}
})
}
form的parse方法:解析node.js中request请求中包含的form表单提交的数据,回调函数里面会有我们在前端提交的字段(fileds),以及图片的详细信息(files)。
如果想把上传后的图片保存到文件夹里面,我们首先要回到图片的路径,然后看是否有这个文件夹,如果没有创建一个文件夹,将图片保存到该路径下,并已该图片的原始名命名