Skip to content
关注公众号,获取新课通知

保存到自己的网盘


控制器:app/controller/share.js

js
	// 保存到自己的网盘
    async saveToSelf(){
        const { ctx,app,service } = this;
        let current_user_id = ctx.authUser.id

        ctx.validate({
            dir_id:{
                type:"int",
                required:true,
                desc:"目录ID"
            },
            sharedurl:{
                type:"string",
                required:true,
                desc:"分享标识"
            },
        })

        let { dir_id,sharedurl } = ctx.request.body

        // 分享是否存在
        let s = await service.share.isExist(sharedurl,{
            include:[{
                model:app.model.File
            }]
        })

        if(s.user_id === current_user_id){
            return ctx.apiSuccess('本人分享,无需保存')
        }

        // 文件是否存在
        if(dir_id > 0){
            await service.file.isDirExist(dir_id)
        }

        // 查询该分享目录下的所有数据
        let getAllFile = async (obj,dirId)=>{
            let data = {
                name: obj.name,
                ext: obj.ext,
                md: obj.md,
                file_id:dirId,
                user_id: current_user_id,
                size: obj.size,
                isdir: obj.isdir,
                url: obj.url,
            }

            // 判断当前用户剩余空间
            if ((ctx.authUser.total_size - ctx.authUser.used_size) < data.size) {
                return ctx.throw(400,'你的可用内存不足');
            }

            // 直接创建
            let o = await app.model.File.create(data)

            // 更新user表的使用内存
            ctx.authUser.used_size = ctx.authUser.used_size + parseInt(data.size);
            await ctx.authUser.save();

            // 目录
            if(obj.isdir){
                // 继续查询下面其他的数据
                let rows = await app.model.File.findAll({
                    where:{
                        user_id:obj.user_id,
                        file_id:obj.id,
                    }
                });

                rows.forEach((item)=>{
                    getAllFile(item,o.id)
                })

                return
            } 
        }
        
        await getAllFile(s.file,dir_id)

        ctx.apiSuccess('ok')

    }

路由:app/router.js

js
router.post("/share/save_to_self", controller.share.saveToSelf);