前言:
JS因为安全的问题是没办法对文件进行操作的,但是node就不一样了,虽然两个并没有太大的关系但是node的语法都是一样的都采用的是ES语法,那么我们今天来分享一下上传图片,同时在附带一个发送验证码的操作代码。话不多说,我们开始。
一、上传文件
上传文件需要依赖第三方插件multer,同时上传文件的方式也是我们熟悉的formdata对象上传
const express=require('express')
const multer=require('multer')
const app=express()
var storage=multer.diskStorage({
// 我们设置文件上传后的保存位置,这里我们设置的是当前文件夹的img文件夹,正常情况下它会在当前文件夹里边自动创建img文件夹,如果没有自己创建一个就行了
destination:function(req,file,cb){
cb(null,'./img')
},
// 给上传文件重命名,获取添加后缀名
filename:function(req,file,cb){
var fileFormat=(file.originalname).split('.')
// 给图片加上时间戳格式防止重命名
// 比如把abc.jpg图片切割为数组[abc,jpg],然后用数组长度-来获取后缀名,因为命名有可能是xxx.xxx.xxx.jpg,所以上边取最后一个(fileFormat.length-1)
cb(null,file.fieldname+'-'+Date.now()+'.'+fileFormat[fileFormat.length-1])
}
})
var upload=multer({
storage:storage
})
// 上传图片只能是POST请求
app.post('/uploadFile',upload.single('file'),(req,res)=>{
//upload.single()里边的file是指定上传formdata时的键名
console.log(req.file)
let {size,mimetype,path}=req.file
let types=['jpg','jpeg','png','gif']//限制上传的文件类型
let temType=mimetype.split('/')[1]
// 限制尺寸(不大于500k)
if(size>=500*1024){
return res.send({err:-1,msg:'文件过大'})
}else if(types.indexOf(temType)===-1){
return res.send({err:-1,msg:'类型错误'})
}else{
// 这里对文件进行拼接能够直接访问到这个图片,这个imgUrl就是我们访问图片的地址
let imgUrl=`/img/${req.file.fieldname}`
res.send({err:0,msg:imgUrl})
}
})
app.listen(8080,()=>{
console.log('服务器已启动')
})
上边的就是我们上传图片的信息。
这里是我们上传的文件,以及它的文件夹目录。
二、发送验证码
发送验证码需要使用第三方插件nodemailer
// 严格模式
'use strict';
const nodemailer = require('nodemailer');
// 创建发送邮件的对象
let transporter = nodemailer.createTransport({
host: 'smtp.qq.com',/*
发送方用的是哪一个邮箱比如qq,可以在node_modules/nodemailer/lib/well-known/services.json里边找 */
port: 465,//端口号
secure: true, // 端口号是465时写true,否则写false
auth: {
user: '', // 发送方的邮箱地址
pass: 'bkdwhjhyjrpfchdb' // mtp的验证码
}
});
// 封装一个函数,第一个是发送的对象,第二个是参数是发送的内容
function send(mail, code) {
// 邮件信息
let mailobj = {
from: '"Fred Foo ?" <>', // 发送方的邮箱
to: mail, // 发送给谁(发送一个或多个,多个用逗号隔开)
subject: '夜星', // 标题
text: `您的验证码是:${code},有效期是5分钟`// 发送的文本信息(只能输文本),文本信息和网页信息只能有一个
// html: '<b>Hello world?</b>' // 发送的html页面
}
return new Promise((resolve, reject) => {
// 发送邮件
transporter.sendMail(mailobj, (err, data) => {
if (err) {
reject('发送成功')
} else {
resolve('发送失败')
}
})
})
}
//把这个对象暴露出去,之后直接引入使用就行了
module.exports = { send: send }
代码的分享就结束了,感谢观看!