インターネットの発展に伴い、ネットワークディスクの需要が高まっていますが、市販のネットワークディスク製品ではプライバシー漏洩などの問題が頻繁に報告されており、独自のネットワークディスクを構築することがトレンドになっています。 。この記事では、golangを使って簡単なネットワークディスクを構築する方法を紹介します。
1. 環境の準備
golang を使用してネットワーク ディスクを構築するには、特定のプログラミング機能と次の環境の準備が必要です:
1.1 必要なツール
1.2 依存ライブラリ
golang.org/x/crypto: Go 言語の組み込み暗号化パッケージに加えて、SHA256/384/512、RC4、DES、AES などを含む、より安全な暗号化アルゴリズムのサポートを提供します。 - github.com/gin-gonic/gin: 単純な Web アプリケーションだけでなく、より複雑なアプリケーションも迅速に作成するために使用できる高性能 HTTP フレームワーク。
- github.com/go-xorm/core: データベースに対する CRUD 操作のための軽量の ORM フレームワーク。
- github.com/go-xorm/xorm: コア パッケージに基づく拡張バージョン。簡略化された SQL 生成、トランザクション、キャッシュ、複数のデータ ソース アクセスなどを提供し、さまざまな大規模なデータ アクセスに適しています。そして小規模プロジェクト層。
-
2. プロジェクト アーキテクチャ
ネットワーク ディスクのバックエンドは、ファイルをメモリに読み取り、HTTP サーバー経由でアクセス サービスを提供するファイル管理システムです。シンプルな HTML/CSS/JS ページを使用してインタラクティブ性を実現します。開発プロセス中、私たちは MVC 設計パターンに厳密に従い、モデル、ビュー、コントローラーの 3 つのレベルを分離しました。
2.1 モデル層
モデル層は主にデータ アクセスを担当し、基盤となるデータ ストレージからデータを抽出し、それをビジネス処理のためにコントローラー層に提供します。私たちのシステムでは、CURD 操作は主にファイルに対して実行されます。 ORM フレームワーク xorm を使用して基礎となるデータを抽象化し、よりシンプルで明確な API を提供します。
データ モデルは、次のように Go 言語構造を使用して定義されます。
type User struct {
Id int64
Username string `xorm:"unique"`
Password string
}
ログイン後にコピー
2.2 ビュー レイヤー
ビュー レイヤーは、Web アプリケーションのプレゼンテーション レイヤーに対応し、主に制御層の統合を担当します。返されたデータはプログラム インターフェイスにレンダリングされ、インターフェイスから送信された要求データは処理のために制御層に渡されます。私たちのシステムでは、ビュー層が主にフロントエンド ページのドッキングの処理を担当します。
Gin フレームワークを使用してビュー レイヤー コードを作成します。まずルーティング管理の設定が必要ですが、特定のURLを入力すると、対応する処理関数が自動的に呼び出されて処理が行われます。 Jin フレームワークでは、これは非常に簡単に実装できます。
router := gin.Default()
router.GET("/files", handlers.ListFiles)
router.PUT("/files/:name", handlers.AddFile)
router.POST("/files/:name", handlers.UpdateFile)
router.DELETE("/files/:name", handlers.DeleteFile)
router.Run(":8020")
ログイン後にコピー
2.3 コントローラー層
コントローラー層は、リクエストの処理、データのビュー層への取得、そして最終的に処理結果の返しを担当します。 。私たちのシステムでは、コントローラー層が主にビジネス ロジックの処理を担当します。
処理中、まずユーザーがログインしているかどうかを判断する必要があります。ログインしていない場合はログイン ページにジャンプし、ログインしていない場合はファイル リストにジャンプします。同様に、ユーザーがファイルをリクエストした場合は、まずファイルが存在するかどうかを確認する必要があり、存在しない場合は 404 エラー ページを返します。
3. ファイル操作
3.1 ファイルのアップロード
ファイルをアップロードする前に、まずファイルの型チェックを実行する必要があります。 HTTP パケットの分析によってファイルの種類が改ざんされるのを防ぐために、フロントエンドで種類のチェックを実行することをお勧めします。 JavaScript の FileReader オブジェクトを使用して、アップロードされたファイルを読み取り、AJAX リクエストをブロックします。
ユーザーがファイルのアップロードを選択すると、ファイルの非同期読み取りが開始され、読み取りが完了すると、ファイルはバイナリ モードでサーバーにアップロードされます。アップロードが成功すると、ファイル情報はデータベースに保存され、管理が容易になります。
3.2 ファイルのダウンロード
ファイルのダウンロードをリクエストする場合、HTTP サービスを使用してファイルをストリーム形式でブラウザに直接返します。同時に、http.ServeContent 関数を使用してファイルを転送し、ファイル転送が完全に正しく、制御可能であることを確認します。
func (h
Handler) DownloadFile(c gin.Context) {
fileName := c.Param("name")
filePath := h.filePath(fileName)
if _, err := os.Stat(filePath); os.IsNotExist(err) {
c.String(http.StatusNotFound, "file not exist")
return
}
c.Writer.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", fileName))
c.Writer.Header().Add("Content-Type", getContentType(fileName))
http.ServeFile(c.Writer, c.Request, filePath)
ログイン後にコピー
}
3.3 ファイルの削除
ファイルの削除比較的簡単な操作です。まず、ファイルが存在するかどうかを確認し、存在しない場合はエラー メッセージを返す必要があります。次に、データベースからファイル情報を削除し、最後にディスクからファイルを削除する必要があります。
func (h
Handler) DeleteFile(c gin.Context) {
fileName := c.Param("name")
filePath := h.filePath(fileName)
if _, err := os.Stat(filePath); os.IsNotExist(err) {
c.String(http.StatusNotFound, "file not exist")
return
}
session := h.engine.NewSession()
defer session.Close()
if err := session.Begin(); err != nil {
log.Printf("begin transaction failed: %s", err.Error())
c.String(http.StatusInternalServerError, err.Error())
return
}
if _, err := session.Delete(&File{FileName: fileName}); err != nil {
session.Rollback()
c.String(http.StatusInternalServerError, err.Error())
return
}
if err := session.Commit(); err != nil {
c.String(http.StatusInternalServerError, err.Error())
return
}
if err := os.Remove(filePath); err != nil {
c.String(http.StatusInternalServerError, err.Error())
return
}
c.Header("Access-Control-Allow-Origin", "*")
c.String(http.StatusOK, "file delete success")
ログイン後にコピー
}
4. セキュリティ ポリシー
Forネットワーク ディスク システムのセキュリティを向上させるには、開発プロセス中に次のセキュリティ ポリシーに厳密に従う必要があります。
4.1 権限制御
許可されたユーザーのみがシステムのさまざまな機能を使用できます。 、他のユーザーはデータにアクセスして変更することはできません。
4.2 データ暗号化
送信中や保存中の情報の盗難や改ざんなどのセキュリティ インシデントを回避するために、すべての機密情報を暗号化する必要があります。
4.3 ネットワーク攻撃の防止
システムは、ネットワークからの攻撃を回避するために、ファイアウォール、ウイルス対策ソフトウェアなどを含む (ただしこれらに限定されない) 効果的な予防措置を採用する必要があります。
5.概要
この記事では、golang を使用して単純なネットワーク ディスク システムを構築する方法を学びました。開発プロセスでは、MVC 設計パターンに厳密に従い、モジュールを分離して品質と保守性を向上させました。さらに、システムのセキュリティを厳密に考慮し、いくつかの一般的なセキュリティ問題を回避し、ネットワーク ディスク システムの信頼性とセキュリティを向上させました。 golang でプログラミングを始めたばかりの人にとって、この記事は golang のアプリケーション シナリオをより深く理解し、プロジェクト開発をすぐに始めるのに役立つと信じています。
以上がGolang ネットワークディスク構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。