node通过formidable上传图片模块功能实现

本文详细介绍了一个基于Node.js的图片上传模块实现细节,包括如何使用formidable处理表单数据,设置上传目录,检查文件大小及类型,以及重命名并移动上传的文件。通过这个模块,可以有效管理图片上传过程,确保上传文件符合预设标准。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

var fs=require("fs");
var formidable=require("formidable");
/*
* 上传图片的模块
* req,请求对象
* picName,上传name名字
* cb:回调函数
* 返回结果:
*   cb({
        status:1,//1、上传的是一个空文件  2上传成功啦 3 上传格式错误
        params:params  //表单当中,除了上传文件之外的内容 。
        newName:图片的名字。
        msg:结果的文字说明
    })*/
module.exports.upPic=function(req,picName,cb){
    var form = new formidable.IncomingForm();   //创建上传表单
    form.encoding = 'utf-8';        //设置编辑
    form.uploadDir = "./upload"     //设置上传目录
    form.keepExtensions = true;     //保留后缀
    form.maxFieldsSize = 2 * 1024 * 1024;   //文件大小
    form.parse(req,(err,params,file)=>{
        if(file[picName].size<=0){
            fs.unlink(file[picName].path,(err)=>{
                cb({
                    status:1,//上传的是一个空文件
                    params:params,
                    msg:"请选择上传的图片"
                })
            })
        }else{
            var num=file[picName].path.lastIndexOf(".");
            var extension=file[picName].path.substr(num).toLowerCase();
            //支持图片上传的格式。
            var imgType=".jpg.jpeg.png.gif";
            //验证上传图片的类型是不是图片格式
            if(imgType.includes(extension)){
                var newName=(new Date()).getTime()+extension;
                //改变名字(重命名),异步
                fs.rename(file[picName].path,form.uploadDir+"/"+newName,(err)=>{
                    cb({
                        status:2,//上传成功啦
                        params:params,
                        newName:newName,
                        msg:"上传成功"
                    })
                })
            }else{
                fs.unlink(file[picName].path,(err)=>{
                    cb({
                        status:3,//上传格式错误
                        params:params,
                        msg:`请上传${imgType}格式的图片`
                    })
                })
            }
        }
    })
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值