nodejs上传图片


function uploadImg(req,resp,filePath,targetFileKey,table){//请求 响应 目标文件夹 最终的文件目录(以请求中的某个字段来作为文件夹)


  var p = new Promise((resolve,reject)=>{
        fs.exists(filePath,res=>{
            resolve(res);
        });
    }).then(res=>{

          return  new Promise((resolve,reject)=>{
                if (!res){
                    fs.mkdir(filePath,err=>{
                        if (!err){
                            resolve(true);
                        }else {
                           reject(err);
                            return ;
                        }
                    })
                }else {
                       resolve(true);
                }

            })
    }).then(result=>{

          return  new Promise((resolve,reject)=>{
                var form = new multiparty.Form({uploadDir: filePath});
                form.parse(req, function(err, fields, files) {
                    if (err) {
                        console.log(err);
                        resp.send('错误');
                        return;
                    }
                    console.log(fields);
                    //判断是否第一次上传图片
                    var userPath = path.join(filePath, `/${fields['loginName'][0]}`);//用户目录
                    var savePath = path.join(userPath, `/${targetFileKey}`); //存放目录
                    resolve({userPath,savePath,fields,files});
                })
            })

    }).then(res=>{ //判断用户文件夹是否存在
      return new Promise((resolve,reject)=>{
          //如果不存在创建一个文件夹
           fs.exists(res["userPath"],result=>{
               if (!result){
                   fs.mkdir(res["userPath"],err=> {
                        if (err){
                            throw err;
                            return ;
                        }
                       resolve(res);
                   })
                }else {
                   //如果子文件夹不存在创建一个
                   console.log(res["savePath"]);
                   fs.exists(res["savePath"],exits=>{
                       if (!exits){
                           fs.mkdir(res["savePath"],err=>{
                               if (err){
                                   throw err;
                                   return ;
                               }else {
                                   resolve(res);
                               }
                           })
                       } else{
                           resolve(res);
                       }
                   })
               }


           })
        })
    }).then(res=>{  //判断分类文件夹是否存在
       return  new Promise((resolve,reject)=>{
           let files = res["files"];
           var data = {result :"图片上传成功",pic:""};
           for (let key in files){
               var imgName = files[key][0].originalFilename;
               var oldName = files[key][0].path;
               var imgPath = path.join(res["savePath"],imgName);
               data[key] = imgPath;
               renameImg(oldName,imgPath);
           }
           resolve(data);
       });

   });
    return p;
}
function renameImg(oldName,imgPath){
    fs.exists(imgPath,succ=>{ //判断图片是否存在,不存在直接存入
        if (!succ){
            //重命名图片
            fs.rename(oldName, imgPath, function(err) {
                if(err){
                    reject("err"+err);
                    return;
                } else {
                    console.log("不存在存入图片");
                    return {key:imgPath};
                }
            });
        }else{ //删除后存入
            fs.unlinkSync(imgPath);
            //重命名
            console.log("存在存入图片");
            fs.rename(oldName, imgPath, function(err) {
                if(err){
                    reject("err"+err);
                    return ;
                } else {
                    return {key:imgPath};
                    return;
                }
            });
        }
    })
}
//调用
util.uploadImg(req, resp, path.join(__dirname, "../static/user"), 'comment').then(res=>{
        console.log(res);
    })
//欢迎喜欢编程的同学添加我的微信
boosdm001
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东哥爱编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值