要成为六边形战士 發表於 2023-12-14 01:45:00

自己写个网盘系列:② 看我用不到700行代码,完成了个网盘后端编码

<blockquote>
<p>❤系列①已经完成了这个项目的页面和项目的准备,前后端分离,就差后端接口代码的实现,这个文章将向你展示如何对接前端小伙写好的页面,不用去改前端来进行适配,原计划1000行一下的代码实现,现在用了不到700行,快来看看吧!</p>
</blockquote>
<blockquote>
<p>❤说明:这个系列准备用Simple快速框架搞个自己能用的网盘,来个实战,教大家如何搞一个项目,其中你能学到如何进行项目级对接,如何快速进行项目编码,如何完善你的项目,以及如何部署它。</p>
</blockquote>
<h1 id="我的快速开发框架项目">💥我的快速开发框架项目</h1>
<blockquote>
<p>先介绍下我的基于.NET 8的快速开发框架Simple Framework,旨在简化开发流程,减少学习成本。框架特点包括基于.NET 8、少用第三方库、基本授权鉴权、CRUD实现和后台管理前端。规划使用了NLog、Redis、Json库等,并支持多数据库结构。框架包含基础库、Web项目扩展库、EFCore扩展库、代码生成器和定时任务模块,并提供了一套基于vue2 elementui前端页面框架,以提高开发效率和灵活性,发布以来收到了很多朋友的喜欢,本文的封装工具也是朋友的建议下撸出来的,快去看看吧。点我✨Star</p>
</blockquote>
<h1 id="项目进度说明">🎈项目进度说明</h1>
<p>开启博文2时,先初略看眼博文1,前面博文中提到的部分再次不进行复述了,点此进前置博文</p>
<p>正常项目,当原型图和设计出来以后,前后端开发都可以开始各自的编码了,前端完成页面的实现和js部分的逻辑编码,甚至自己进行mock开发测试,后端按照功能和设计,开发对应的接口模块,并形成接口文档和前端进行对接,双方可能需要对参数输入和接口输出进行商讨调整后才能完成功能对接。</p>
<p>可这个项目预算明显有限,由前面的博文知道了,项目经理找了个CV文件夹的前端🎃,已经写好走人了,剩下的全靠狗后端自己搞定了,作为一个经常重构其他已有应用的后端,这自然也是家常便饭,哪有万事如意,开搞吧!</p>
<h1 id="后端项目开始">后端项目开始</h1>
<p>虽然没了前端的支持,这也不是没遇到过,先看功能图,数据存储模型大同小异,模型就cv下前面提到的python大神的项目的表,增加个操作日志表,记录下请求的日志,后面的东西全部自己按需实现。</p>
<blockquote>
<p>使用到的技术及组件</p>
<ol>
<li>快速开发框架Simple Framework (.NET 8)</li>
<li>Redis</li>
<li>MediatR</li>
<li>EFCore</li>
<li>NLog</li>
<li>Sqlite 3</li>
</ol>
</blockquote>
<h1 id="模型构建说明">模型构建说明</h1>
<blockquote>
<p>模型截图:</p>
</blockquote>
<p><img src="https://img2023.cnblogs.com/blog/675347/202312/675347-20231214000527724-1793999194.png" alt="image" loading="lazy"></p>
<blockquote>
<p>主要包含:</p>
</blockquote>
<ol>
<li>
<p>Catalog 目录表,记录目录树<br>
<img src="https://img2023.cnblogs.com/blog/675347/202312/675347-20231214003851073-2071690521.png" alt="image" loading="lazy"></p>
</li>
<li>
<p>CloudFile 文件表,记录文件信息<br>
<img src="https://img2023.cnblogs.com/blog/675347/202312/675347-20231214003930625-360523655.png" alt="image" loading="lazy"></p>
</li>
<li>
<p>OperateLog 操作日志表,记录下请求的日志<br>
<img src="https://img2023.cnblogs.com/blog/675347/202312/675347-20231214003954798-5786756.png" alt="image" loading="lazy"></p>
</li>
<li>
<p>Server 表,备用记录下ssh连接的服务器信息,做后期扩展<br>
<img src="https://img2023.cnblogs.com/blog/675347/202312/675347-20231214004017939-2050310206.png" alt="image" loading="lazy"></p>
</li>
<li>
<p>Share 分享记录表,存储分享文件的信息<br>
<img src="https://img2023.cnblogs.com/blog/675347/202312/675347-20231214004041064-875314673.png" alt="image" loading="lazy"></p>
</li>
<li>
<p>User 用户表,记录用户信息<br>
<img src="https://img2023.cnblogs.com/blog/675347/202312/675347-20231214004101938-1461344696.png" alt="image" loading="lazy"></p>
</li>
</ol>
<h1 id="解决方案及项目结构">解决方案及项目结构</h1>
<p>此项目比较简单,但是为了以后可能做的扩展,还是分做了多个项目。</p>
<ol>
<li>搭建WebHost项目用作API的主机,启动api及运行wwwroot的前端静态文件。</li>
<li>搭建Application项目,将项目的模型及主要功能实现放到这里。</li>
</ol>
<blockquote>
<p>下面是项目结构截图:</p>
</blockquote>
<p><img src="https://img2023.cnblogs.com/blog/675347/202312/675347-20231214001512669-1542613325.png" alt="image" loading="lazy"></p>
<h1 id="webhost说明">WebHost说明</h1>
<blockquote>
<p>webhost项目主要是承载api和开启静态文件访问使用的,比较简单。</p>
</blockquote>
<ol>
<li>启动文件Program.cs 中直接使用SimpleHost.SimpleRunWeb一键配置就好了,包含基础的api项目配置,没有额外掺杂东西,具体去看框架源码部分代码</li>
</ol>
<p><img src="https://img2023.cnblogs.com/blog/675347/202312/675347-20231214002223368-1470916318.png" alt="image" loading="lazy"></p>
<ol>
<li>配置文件也比较干净,主要配置下redis、数据库连接串,网盘的根目录地址,</li>
</ol>
<p><img src="https://img2023.cnblogs.com/blog/675347/202312/675347-20231214002518251-1537340756.png" alt="image" loading="lazy"></p>
<ol>
<li>控制器部分,观察了下前端api请求都已cloud开头,我们就建立一个控制器,来接收请求吧,反正也不多就不分多个了</li>
</ol>
<p><img src="https://img2023.cnblogs.com/blog/675347/202312/675347-20231214002655143-808442083.png" alt="image" loading="lazy"></p>
<p>👀写完登录接口后,进入前端页面,我们点点前端静态页面,把用到的接口和参数都列出来,加入到控制器中,等待在Application项目中去实现</p>
<p><img src="https://img2023.cnblogs.com/blog/675347/202312/675347-20231214002836668-895062289.png" alt="image" loading="lazy"></p>
<p>👏全部接口已经列好了,我们看看怎么实现下吧</p>
<h1 id="application部分">Application部分</h1>
<p>通用返回值的封装,查看前端js请求代码,发现他对接口返回值有相同的处理,code,msg,total,data<br>
<img src="https://img2023.cnblogs.com/blog/675347/202312/675347-20231214003227941-1346681311.png" alt="image" loading="lazy"></p>
<p>那我们封装个通用的返回类 CloudResult 来返回数据,定义如下</p>
<p><img src="https://img2023.cnblogs.com/blog/675347/202312/675347-20231214003355807-373072214.png" alt="image" loading="lazy"></p>
<p>特殊Dto定义,核对发现,其中关于文件操作的请求参数和文件返回参数比较特殊,给他们定义一下:</p>
<p><img src="https://img2023.cnblogs.com/blog/675347/202312/675347-20231214003601911-753265381.png" alt="image" loading="lazy"></p>
<p>操作日志的统一处理,使用 MediatR 将操作日志集中到事件 OperateLogEvent 中处理,所有的日志都在这存储了</p>
<p><img src="https://img2023.cnblogs.com/blog/675347/202312/675347-20231214003736976-597119214.png" alt="image" loading="lazy"></p>
<p>关于业务处理,主要分作了了2个主要部分:关于账户相关的逻辑、关于文件相关的逻辑</p>
<ol>
<li>
<p>账户相关<br>
<img src="https://img2023.cnblogs.com/blog/675347/202312/675347-20231214004514157-1365915194.png" alt="image" loading="lazy"></p>
</li>
<li>
<p>文件相关<br>
<img src="https://img2023.cnblogs.com/blog/675347/202312/675347-20231214004544487-1348941798.png" alt="image" loading="lazy"></p>
</li>
</ol>
<p>由于项目中经常需要根据目录结构树构建子目录和文件的目录树,新增了FolderBuildService文件来处理目录和文件公共的一些逻辑<br>
<img src="https://img2023.cnblogs.com/blog/675347/202312/675347-20231214004735269-331291710.png" alt="image" loading="lazy"></p>
<p>整个项目已经完成了,整体代码图如下:<br>
<img src="https://img2023.cnblogs.com/blog/675347/202312/675347-20231214010003474-1735849010.png" alt="image" loading="lazy"></p>
<p>项目代码行数分析图 692行:<br>
<img src="https://img2023.cnblogs.com/blog/675347/202312/675347-20231214011018868-487650975.png" alt="image" loading="lazy"></p>
<h1 id="编码完结">编码完结</h1>
<p>💥💥💥至此,这个没怎么测试的项目就基本完了,主要给家里或者内网使用,安全上没有做更多的设置,传输安全啊,文件大小限制啊,账号安全啊之类的可按需要扩展,下面就差测试工程师测试和运维去部署下了,后续将教大家怎么进行windows和linux的常规发布部署,怎么在家里部署了给外网的你使用。</p>
<h1 id="总结">总结</h1>
<p>使用不到700行代码,基本实现了整个网盘的常用功能:文件夹、文件增删改,文件分享,前端一些预览功能(这部分没怎么编码),使用的技术也非常简单,但是不可否认,这已经是一个完整的项目,快来一起学习吧<br>
更多精彩,点赞评论加关注哦</p>


</div>
<div id="MySignature" role="contentinfo">
    在时间轴上留下点什么,作为个程序员,就在cnblog上吧,我不是技术大牛,也不是IT狂热者,说不上是我选了它还是它选了我,结果是现在我是一名程序员,我对它很感兴趣,不为以后做业务大佬、行业顶尖,只想在自己能力范围内,把事情做到最好,在博客园记录下自己的历程吧,工作,学习,感情,生活。<br><br>
来源:https://www.cnblogs.com/Start201505/p/17900273.html
頁: [1]
查看完整版本: 自己写个网盘系列:② 看我用不到700行代码,完成了个网盘后端编码