ホームページ >バックエンド開発 >Golang >HTMX と Golang を使用したファイルのアップロード

HTMX と Golang を使用したファイルのアップロード

WBOY
WBOYオリジナル
2024-08-20 06:32:41648ブラウズ

もちろん、HTMX の素晴らしさについてはすでに聞いたことがあるでしょう (まだ聞いたことがないのですか? ここに来て良かったですか?)

今日は、HTMX のシンプルさと Golang の機能を組み合わせて、ファイルをサーバーにアップロードします。そうですね、私たちは HTMX と Go を使って別のエキサイティングな Web 機能を構築するつもりです。

ところで、HTMX を使用したフルスタック アプリケーションの構築に関する実践的なプロジェクトベースのガイドが本当に必要な場合は、私の HTMX + Go: Build Fullstack Applications with Golang and HTMX コース [割引あり] をチェックしてください。

それでは、始めましょう。

Go プロジェクトのセットアップ

最初のステップは、単純な Go プロジェクトをセットアップすることです。これを行うには、フォルダーを作成し、そのフォルダーに移動し、以下のコマンドを使用して Go プロジェクトとして初期化します。

mkdir go-htmx-file-uploads
cd go-htmx-file-uploads
go mod init go-htmx-file-uploads

プロジェクトを初期化したら、プロジェクト内で必要となる依存関係をいくつかインストールしましょう。

これは、アップロード フォームを含む単一のページと、ファイルのアップロードに使用されるエンドポイントを含む単純なサーバーになります。

ルーティングには、Gorilla Mux ルーティング ライブラリを使用しますが、お好みのルーティング ソリューションを自由に使用してください。また、Google の Go 用 UUID ライブラリを使用して、ファイルをアップロードするときにファイルのランダムな名前を生成します。さまざまな方法でファイル名を生成できるため、これは個人的な好みです。

以下のコマンドを使用してこれら 2 つをインストールします:

ゴリラマックス

go get -u github.com/gorilla/mux 

Google UUID

go get github.com/google/uuid

これら 2 つがインストールされると、プロジェクトは完全にセットアップされ、次のステップに進むことができます。

テンプレートの作成

この小さなプロジェクト用に 2 つの HTML テンプレートを作成します。

最初のテンプレートは、サーバーからクライアントに送信できる文字列メッセージのスライスを単に取得する HTML フラグメントです。

このフラグメントは、メッセージのこのスライスを取得し、それをループして、クライアントに返される HTML リストを作成します (HTMX がハイパーメディア API とどのように連携するかを覚えていますか。とてもすばらしいですね)。

それでは、まずそれを作成しましょう。

Go プロジェクトのルートに、まずテンプレート フォルダーを作成します。このフォルダー内にすべてのテンプレートを保存します。

次に、テンプレート フォルダー内にファイルmessages.htmlを作成し、次のコードをそれに追加します。

{{define "messages"}}
<ul>
    {{range .}}
        <li>{{ . }}</li>
    {{end}}
</ul>
{{end}}

これはメッセージ テンプレートを定義し、文字列メッセージの受信スライスをループして HTML リストを形成します。

次のテンプレートでは、ファイル アップロード ページ自体を作成します。

テンプレート フォルダー内に新しいファイル Upload.html を作成し、以下のコードを貼り付けます。

{{define "upload"}}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://unpkg.com/htmx.org@1.9.12"></script>
    <title>Upload File</title>
</head>
<body>

    <div class="row">
        <div class="col-md-6 p-5 mt-5">
            <h4>Upload File</h4>
            <form  class="form">
                <div id="messages"></div>
                <div class="mb-3">
                    <label for="avatarInput" class="form-label">Select Image</label>
                    <input type="file" class="form-control" id="avatarInput" name="avatar" required>
                </div>
                <button 
                    hx-post="/upload" 
                    hx-encoding="multipart/form-data" 
                    hx-target="#messages" 
                    type="submit" class="btn btn-primary">Upload</button>
            </form>
        </div>
    </div>



</body>
</html>
{{end}}

完璧です!

次に、このファイルのコードを見てみましょう。

まず、upload という名前でテンプレートを定義しました。これは、後でルート ハンドラーで参照するために使用する名前です。

head セクションには定型的な HTML コードがいくつかありますが、ここでは 2 つの重要なライブラリを含めています (まあ、本当に重要なのは 1 つだけで、もう 1 つは CSS の雰囲気のためだけです)。

HTMLMX ライブラリは