node上传图片及发送验证码代码分享及讲解

前言:

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 }

代码的分享就结束了,感谢观看!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值