自己寫個網盤系列:② 看我用不到700行程式碼,完成了個網盤後端編碼

VictorStar發表於2023-12-14

❤系列①已經完成了這個專案的頁面和專案的準備,前後端分離,就差後端介面程式碼的實現,這個文章將向你展示如何對接前端小夥寫好的頁面,不用去改前端來進行適配,原計劃1000行一下的程式碼實現,現在用了不到700行,快來看看吧!

❤說明:這個系列準備用Simple快速框架搞個自己能用的網盤,來個實戰,教大家如何搞一個專案,其中你能學到如何進行專案級對接,如何快速進行專案編碼,如何完善你的專案,以及如何部署它。

💥我的快速開發框架專案

先介紹下我的基於.NET 8的快速開發框架Simple Framework,旨在簡化開發流程,減少學習成本。框架特點包括基於.NET 8、少用第三方庫、基本授權鑑權、CRUD實現和後臺管理前端。規劃使用了NLog、Redis、Json庫等,並支援多資料庫結構。框架包含基礎庫、Web專案擴充套件庫、EFCore擴充套件庫、程式碼生成器和定時任務模組,並提供了一套基於vue2 elementui前端頁面框架,以提高開發效率和靈活性,釋出以來收到了很多朋友的喜歡,本文的封裝工具也是朋友的建議下擼出來的,快去看看吧。點我✨Star

🎈專案進度說明

開啟博文2時,先初略看眼博文1,前面博文中提到的部分再次不進行復述了,點此進前置博文

正常專案,當原型圖和設計出來以後,前後端開發都可以開始各自的編碼了,前端完成頁面的實現和js部分的邏輯編碼,甚至自己進行mock開發測試,後端按照功能和設計,開發對應的介面模組,並形成介面文件和前端進行對接,雙方可能需要對引數輸入和介面輸出進行商討調整後才能完成功能對接。

可這個專案預算明顯有限,由前面的博文知道了,專案經理找了個CV資料夾的前端🎃,已經寫好走人了,剩下的全靠狗後端自己搞定了,作為一個經常重構其他已有應用的後端,這自然也是家常便飯,哪有萬事如意,開搞吧!

後端專案開始

雖然沒了前端的支援,這也不是沒遇到過,先看功能圖,資料儲存模型大同小異,模型就cv下前面提到的python大神的專案的表,增加個操作日誌表,記錄下請求的日誌,後面的東西全部自己按需實現。

使用到的技術及元件

  1. 快速開發框架Simple Framework (.NET 8)
  2. Redis
  3. MediatR
  4. EFCore
  5. NLog
  6. Sqlite 3

模型構建說明

模型截圖:

image

主要包含:

  1. Catalog 目錄表,記錄目錄樹
    image

  2. CloudFile 檔案表,記錄檔案資訊
    image

  3. OperateLog 操作日誌表,記錄下請求的日誌
    image

  4. Server 表,備用記錄下ssh連線的伺服器資訊,做後期擴充套件
    image

  5. Share 分享記錄表,儲存分享檔案的資訊
    image

  6. User 使用者表,記錄使用者資訊
    image

解決方案及專案結構

此專案比較簡單,但是為了以後可能做的擴充套件,還是分做了多個專案。

  1. 搭建WebHost專案用作API的主機,啟動api及執行wwwroot的前端靜態檔案。
  2. 搭建Application專案,將專案的模型及主要功能實現放到這裡。

下面是專案結構截圖:

image

WebHost說明

webhost專案主要是承載api和開啟靜態檔案訪問使用的,比較簡單。

  1. 啟動檔案Program.cs 中直接使用SimpleHost.SimpleRunWeb一鍵配置就好了,包含基礎的api專案配置,沒有額外摻雜東西,具體去看框架原始碼部分程式碼

image

  1. 配置檔案也比較乾淨,主要配置下redis、資料庫連線串,網盤的根目錄地址,

image

  1. 控制器部分,觀察了下前端api請求都已cloud開頭,我們就建立一個控制器,來接收請求吧,反正也不多就不分多個了

image

👀寫完登入介面後,進入前端頁面,我們點點前端靜態頁面,把用到的介面和引數都列出來,加入到控制器中,等待在Application專案中去實現

image

👏全部介面已經列好了,我們看看怎麼實現下吧

Application部分

通用返回值的封裝,檢視前端js請求程式碼,發現他對介面返回值有相同的處理,code,msg,total,data
image

那我們封裝個通用的返回類 CloudResult 來返回資料,定義如下

image

特殊Dto定義,核對發現,其中關於檔案操作的請求引數和檔案返回引數比較特殊,給他們定義一下:

image

操作日誌的統一處理,使用 MediatR 將操作日誌集中到事件 OperateLogEvent 中處理,所有的日誌都在這儲存了

image

關於業務處理,主要分作了了2個主要部分:關於賬戶相關的邏輯、關於檔案相關的邏輯

  1. 賬戶相關
    image

  2. 檔案相關
    image

由於專案中經常需要根據目錄結構樹構建子目錄和檔案的目錄樹,新增了FolderBuildService檔案來處理目錄和檔案公共的一些邏輯
image

整個專案已經完成了,整體程式碼圖如下:
image

專案程式碼行數分析圖 692行:
image

編碼完結

💥💥💥至此,這個沒怎麼測試的專案就基本完了,主要給家裡或者內網使用,安全上沒有做更多的設定,傳輸安全啊,檔案大小限制啊,賬號安全啊之類的可按需要擴充套件,下面就差測試工程師測試和運維去部署下了,後續將教大家怎麼進行windows和linux的常規釋出部署,怎麼在家裡部署了給外網的你使用。

總結

使用不到700行程式碼,基本實現了整個網盤的常用功能:資料夾、檔案增刪改,檔案分享,前端一些預覽功能(這部分沒怎麼編碼),使用的技術也非常簡單,但是不可否認,這已經是一個完整的專案,快來一起學習吧
更多精彩,點贊評論加關注哦

相關文章