node js 实现文件上传 下载 删除一整套,包含校验创建文件夹 直接粘贴使用完全没问题

3 篇文章 0 订阅
1 篇文章 0 订阅

使用 nodejs 进行 post请求 上传文件 下载文件 删除文件 功能 废话少说 直接上代码 cp就能使用

首先是文件上传功能

router.post('/pushFile',upload.single('test'),(req,res)=>{
    if(req.body.resourcesid!=undefined && req.body.resourcesid!=""&&req.file!=undefined && req.file.originalname!=undefined){
        var originalname =  confirmEnding(req.file.originalname);
        if(originalname.indexOf("sh") !=-1 || originalname.indexOf("php") !=-1){

            return res.send({err:0,msg:'上传失败 非法上传'})
        }else{
        var filename = new Date().getTime()+req.file.originalname
        
        if(filename.indexOf("/")!=-1||filename.indexOf("\\")!=-1||filename.indexOf(">")!=-1||filename.indexOf("<")!=-1){
            return  res.send({"code":400,"msg":"删除失败,文件地址有误 不能包含特殊字符,可为全数字或全字母或中文"})
        }else{
            try {
                    const absPath = path.resolve("/", "/file");
                    fs.stat(absPath, function (err, stats) {
                        if (!stats) {
                            fs.mkdir(absPath, {recursive: true}, err => {
                                if (err) throw err;

                                try {
                                    fs.readFile(req.file.path,(err,data)=>{
                                        //如果读取失败
                                        if(err){return res.send('上传失败')}
                                        //3.回调函数                    
                                            fs.writeFile(path.join("/",'/file/'+filename),data,(err)=>{
                                                if(err){return res.send('写入失败')}
                                             return res.send({err:0,msg:'上传ok'})
                                            });
                                        });
                                   } catch (error) {
                                    return res.send({err:0,msg:'上传失败 上传文件出现异常'})
                                   }

                            }); //Create dir in case not found
                        }else{
                            try {
                                fs.readFile(req.file.path,(err,data)=>{
                                    //如果读取失败
                                    if(err){return res.send('上传失败')}
                                    //3.回调函数                    
                                        fs.writeFile(path.join("/",'/file/'+filename),data,(err)=>{
                                            if(err){return res.send('写入失败')}
                        
                                            filController.save(
                                            {
                                                "filename":filename,
                                                "resourcesid":req.body.resourcesid==undefined?"":req.body.resourcesid,
                                                "filetype":originalname,
                                                "fileSize":req.file.fileSize,
                                                "fileAccount":req.session.curUser.account,
                                                "msg":req.body.msg==undefined?"":req.body.msg
                                            },function(err,data){
                                                
                                            });
                        
                                         return res.send({err:0,msg:'上传ok'})
                                        });
                                    });
                               } catch (error) {
                                return res.send({err:0,msg:'上传失败 上传文件出现异常'})
                               }
                        }
                    });
               } catch (error) {
                   
               }
         
        }
       
        }
    }else{
        return res.send({err:0,msg:'上传失败 资源id不能为空或传入文件包含非法请求'})
    }
      
})

文件下载功能

router.post('/getdownFile',(req,res)=>{
    if(req.body!=undefined && req.body.filename !=undefined){
        try {
            var name = req.body.filename;// 待下载的文件名 \
            if(name.indexOf("/")!=-1||name.indexOf("\\")!=-1||name.indexOf(">")!=-1||name.indexOf("<")!=-1){
                return  res.send({"code":400,"msg":"删除失败,文件地址有误 不能包含特殊字符,可为全数字或全字母或中文"})
            }else{
                var path = "/file" + "/" + name;// 待下载文件的路径,指定为当前项目目录下的hello.txt文件
                if(name!=undefined){
                    if (isFileExist(path)) {
                        try {
                            var f = fs.createReadStream(path);
                        const fileName = encodeURIComponent(name)
                        res.writeHead(200, {
                            'Content-Type': 'application/force-download',
                            'Content-Disposition': 'attachment; filename=' + fileName
                        });
                        
                        f.pipe(res);
                        } catch (error) {
                            
                        return res.send({"code":400,"msg":"下载失败"})
                        }
                    }else{
                    return res.send({"code":400,"msg":"下载失败"})
                    }
                   
                }else{
                    
                    return res.send({"code":400,"msg":"下载失败"})
                }
            }

            } catch (error) {
                return  res.send({"code":400,"msg":"下载失败"})
            }
    }else{
        return  res.send({"code":400,"msg":"下载失败"})
    }
    
})

文件删除功能

router.post('/delgetdownFile',(req,res)=>{
    if(req.body!=undefined && req.body.filename !=undefined&& req.body.id!=undefined){
        try {
            var name = req.body.filename;// 待下载的文件名 \
            if(name.indexOf("/")!=-1||name.indexOf("\\")!=-1||name.indexOf(">")!=-1||name.indexOf("<")!=-1){

                return  res.send({"code":400,"msg":"删除失败,文件地址有误 不能包含特殊字符,可为全数字或全字母或中文"})
            }else{
            var path = "/file" + "/" + name;// 待下载文件的路径,指定为当前项目目录下的hello.txt文件
            if(name!=undefined){
                fs.unlink(path,function(error){
                    if(error){
                        console.log(error);
                       return  res.send({"code":400,"msg":"删除失败"})
                    }
                    return  res.send({"code":400,"msg":"删除文件成功"})
                })
            }else{
                
                return  res.send({"code":400,"msg":"删除失败"})
            }
        }
            } catch (error) {
                return   res.send({"code":400,"msg":"删除失败"})
            }
    }else{
        return  res.send({"code":400,"msg":"删除失败"})
    }
})

到这里就完成啦 如果有同学或打工人有不明白的地方 可以提问我哦
对您有帮助的话 记得点赞 收藏 加关注呀 !! 谢谢啦

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值