自己写个网盘系列:② 看我不到700行代码,完成了网盘后端编码
?系列①已經(jīng)完成了這個(gè)項(xiàng)目的頁面和項(xiàng)目的準(zhǔn)備,前后端分離,就差后端接口代碼的實(shí)現(xiàn),這個(gè)文章將向你展示如何對接前端小伙寫好的頁面,不用去改前端來進(jìn)行適配,原計(jì)劃1000行一下的代碼實(shí)現(xiàn),現(xiàn)在用了不到700行,快來看看吧!
?說明:這個(gè)系列準(zhǔn)備用Simple快速框架搞個(gè)自己能用的網(wǎng)盤,來個(gè)實(shí)戰(zhàn),教大家如何搞一個(gè)項(xiàng)目,其中你能學(xué)到如何進(jìn)行項(xiàng)目級對接,如何快速進(jìn)行項(xiàng)目編碼,如何完善你的項(xiàng)目,以及如何部署它。
??我的快速開發(fā)框架項(xiàng)目
先介紹下我的基于.NET 8的快速開發(fā)框架Simple Framework,旨在簡化開發(fā)流程,減少學(xué)習(xí)成本。框架特點(diǎn)包括基于.NET 8、少用第三方庫、基本授權(quán)鑒權(quán)、CRUD實(shí)現(xiàn)和后臺管理前端。規(guī)劃使用了NLog、Redis、Json庫等,并支持多數(shù)據(jù)庫結(jié)構(gòu)。框架包含基礎(chǔ)庫、Web項(xiàng)目擴(kuò)展庫、EFCore擴(kuò)展庫、代碼生成器和定時(shí)任務(wù)模塊,并提供了一套基于vue2 elementui前端頁面框架,以提高開發(fā)效率和靈活性,發(fā)布以來收到了很多朋友的喜歡,本文的封裝工具也是朋友的建議下擼出來的,快去看看吧。點(diǎn)我?Star
??項(xiàng)目進(jìn)度說明
開啟博文2時(shí),先初略看眼博文1,前面博文中提到的部分再次不進(jìn)行復(fù)述了,點(diǎn)此進(jìn)前置博文
正常項(xiàng)目,當(dāng)原型圖和設(shè)計(jì)出來以后,前后端開發(fā)都可以開始各自的編碼了,前端完成頁面的實(shí)現(xiàn)和js部分的邏輯編碼,甚至自己進(jìn)行mock開發(fā)測試,后端按照功能和設(shè)計(jì),開發(fā)對應(yīng)的接口模塊,并形成接口文檔和前端進(jìn)行對接,雙方可能需要對參數(shù)輸入和接口輸出進(jìn)行商討調(diào)整后才能完成功能對接。
可這個(gè)項(xiàng)目預(yù)算明顯有限,由前面的博文知道了,項(xiàng)目經(jīng)理找了個(gè)CV文件夾的前端??,已經(jīng)寫好走人了,剩下的全靠狗后端自己搞定了,作為一個(gè)經(jīng)常重構(gòu)其他已有應(yīng)用的后端,這自然也是家常便飯,哪有萬事如意,開搞吧!
后端項(xiàng)目開始
雖然沒了前端的支持,這也不是沒遇到過,先看功能圖,數(shù)據(jù)存儲模型大同小異,模型就cv下前面提到的python大神的項(xiàng)目的表,增加個(gè)操作日志表,記錄下請求的日志,后面的東西全部自己按需實(shí)現(xiàn)。
使用到的技術(shù)及組件
- 快速開發(fā)框架Simple Framework (.NET 8)
- Redis
- MediatR
- EFCore
- NLog
- Sqlite 3
模型構(gòu)建說明
模型截圖:
主要包含:
-
Catalog 目錄表,記錄目錄樹
-
CloudFile 文件表,記錄文件信息
-
OperateLog 操作日志表,記錄下請求的日志
-
Server 表,備用記錄下ssh連接的服務(wù)器信息,做后期擴(kuò)展
-
Share 分享記錄表,存儲分享文件的信息
-
User 用戶表,記錄用戶信息
解決方案及項(xiàng)目結(jié)構(gòu)
此項(xiàng)目比較簡單,但是為了以后可能做的擴(kuò)展,還是分做了多個(gè)項(xiàng)目。
- 搭建WebHost項(xiàng)目用作API的主機(jī),啟動api及運(yùn)行wwwroot的前端靜態(tài)文件。
- 搭建Application項(xiàng)目,將項(xiàng)目的模型及主要功能實(shí)現(xiàn)放到這里。
下面是項(xiàng)目結(jié)構(gòu)截圖:
WebHost說明
webhost項(xiàng)目主要是承載api和開啟靜態(tài)文件訪問使用的,比較簡單。
- 啟動文件Program.cs 中直接使用SimpleHost.SimpleRunWeb一鍵配置就好了,包含基礎(chǔ)的api項(xiàng)目配置,沒有額外摻雜東西,具體去看框架源碼部分代碼
- 配置文件也比較干凈,主要配置下redis、數(shù)據(jù)庫連接串,網(wǎng)盤的根目錄地址,
- 控制器部分,觀察了下前端api請求都已cloud開頭,我們就建立一個(gè)控制器,來接收請求吧,反正也不多就不分多個(gè)了
??寫完登錄接口后,進(jìn)入前端頁面,我們點(diǎn)點(diǎn)前端靜態(tài)頁面,把用到的接口和參數(shù)都列出來,加入到控制器中,等待在Application項(xiàng)目中去實(shí)現(xiàn)
??全部接口已經(jīng)列好了,我們看看怎么實(shí)現(xiàn)下吧
Application部分
通用返回值的封裝,查看前端js請求代碼,發(fā)現(xiàn)他對接口返回值有相同的處理,code,msg,total,data
那我們封裝個(gè)通用的返回類 CloudResult 來返回?cái)?shù)據(jù),定義如下
特殊Dto定義,核對發(fā)現(xiàn),其中關(guān)于文件操作的請求參數(shù)和文件返回參數(shù)比較特殊,給他們定義一下:
操作日志的統(tǒng)一處理,使用 MediatR 將操作日志集中到事件 OperateLogEvent 中處理,所有的日志都在這存儲了
關(guān)于業(yè)務(wù)處理,主要分作了了2個(gè)主要部分:關(guān)于賬戶相關(guān)的邏輯、關(guān)于文件相關(guān)的邏輯
-
賬戶相關(guān)
-
文件相關(guān)
由于項(xiàng)目中經(jīng)常需要根據(jù)目錄結(jié)構(gòu)樹構(gòu)建子目錄和文件的目錄樹,新增了FolderBuildService文件來處理目錄和文件公共的一些邏輯
整個(gè)項(xiàng)目已經(jīng)完成了,整體代碼圖如下:
項(xiàng)目代碼行數(shù)分析圖 692行:
編碼完結(jié)
??????至此,這個(gè)沒怎么測試的項(xiàng)目就基本完了,主要給家里或者內(nèi)網(wǎng)使用,安全上沒有做更多的設(shè)置,傳輸安全啊,文件大小限制啊,賬號安全啊之類的可按需要擴(kuò)展,下面就差測試工程師測試和運(yùn)維去部署下了,后續(xù)將教大家怎么進(jìn)行windows和linux的常規(guī)發(fā)布部署,怎么在家里部署了給外網(wǎng)的你使用。
總結(jié)
使用不到700行代碼,基本實(shí)現(xiàn)了整個(gè)網(wǎng)盤的常用功能:文件夾、文件增刪改,文件分享,前端一些預(yù)覽功能(這部分沒怎么編碼),使用的技術(shù)也非常簡單,
更多精彩,點(diǎn)贊評論加關(guān)注哦
總結(jié)
以上是生活随笔為你收集整理的自己写个网盘系列:② 看我不到700行代码,完成了网盘后端编码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android app下载并安装
- 下一篇: 不妄