Golang がフォトウォールを実装

WBOY
リリース: 2023-05-13 10:36:07
オリジナル
551 人が閲覧しました

モバイル インターネットの普及に伴い、写真に対する人々の需要が高まっています。イベントでも旅行でもパーティーでも写真撮影は欠かせません。これらの写真をどのように展示するかも悩みの種となっている。フォトウォール機能を実装するアプリができましたので、今回はgolang言語を使ってフォトウォールを実装する手順を紹介します。

1. Golang 言語の特徴

golang は、Google によって開発されたオープンソース言語です。主な機能は次のとおりです:

  1. 効率: Golang のコンパイル速度は非常に速く、C や Java と比較して大きな利点があります。
  2. メモリ管理: Golang のメモリ管理はコンパイラによって自動的に完了するため、プログラマが手動でメモリを管理する必要はありません。
  3. 同時プログラミング: golang は同時プログラミングの強力なサポートを提供し、マルチコア CPU または複数のサーバーの場合にアプリケーションのパフォーマンスを向上させることができます。
  4. シンプルさ: golang 言語の構文は簡潔で理解しやすいため、プログラマーはより早く作業を開始できます。

2. デザインのアイデア

フォト ウォール機能を実装するときは、次の点を考慮する必要があります:

  1. 写真のアップロード: ユーザーは次のことを行う必要があります。自分の写真をアップロードするときは、簡単に分類して表示できるように写真にタグを付けることもできる必要があります。
  2. 写真の表示: アップロードされた写真はタグに従って分類して表示され、ユーザーはタグを選択して表示できます。
  3. データベース ストレージ: フォト ウォールにはユーザーがアップロードした写真データを保存する必要があり、データ ストレージにはデータベースを使用する必要があります。

3. 技術的な実装

  1. 環境セットアップ

始める前に、まず環境を準備する必要があります。 golang の公式 Web サイトから golang インストール パッケージをダウンロードできます。インストールが完了したら、ターミナルに次のコードを入力して、インストールが成功したかどうかを確認します:

$ go version
ログイン後にコピー
  1. Database Design

ユーザーがアップロードした写真を保存するデータベースを設計する必要があるため、次のフィールドを含むテーブルを設計する必要があります:

    #id ​​(写真 ID、主キー)
  • name (写真の名前)
  • path (写真のパス、サーバー上の写真の保存パス)
  • tag (タグ)
上記のフィールドは次のとおりです。保存する必要がある写真情報。

    写真のアップロード
ユーザーが自由に写真をアップロードしてタグ付けできるように、クライアントに写真をアップロードする機能を実装する必要があります。まず、フロントエンド ページに写真のアップロード機能を実装する必要があります。これは HTML5 ファイル API を使用して実装できます。以下はコード例です:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>照片上传</title>
    </head>
    <body>
        <input type="file" id="file">
        <input type="text" id="tag">
        <button onclick="upload()">上传</button>
    </body>
    <script>
        function upload() {
            var file = document.getElementById("file").files[0];
            var tag = document.getElementById("tag").value;
            var formData = new FormData();
            formData.append("file", file);
            formData.append("tag", tag);
            var xhr = new XMLHttpRequest();
            xhr.open("POST", "/upload", true);
            xhr.onload = function () {
                if (xhr.readyState == 4 && xhr.status == 200) {
                    alert("上传成功");
                } else {
                    alert("上传失败");
                }
            }
            xhr.send(formData);
        }
    </script>
</html>
ログイン後にコピー

サーバー側では、golang が提供する http パッケージを使用して写真アップロード機能を実装する必要があります。以下はサンプル コードです。

func upload(w http.ResponseWriter, r *http.Request) {
    file, handler, err := r.FormFile("file")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer file.Close()
    tag := r.FormValue("tag")
    fileName := handler.Filename
    f, err := os.OpenFile("./upload/"+fileName, os.O_WRONLY|os.O_CREATE, 0666)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer f.Close()
    io.Copy(f, file)
    insertData(fileName, "./upload/"+fileName, tag)
    w.Write([]byte("上传成功"))
}
ログイン後にコピー

上記のコードでは、os.OpenFile() を使用して、アップロードされた写真をサーバーのローカル ディスクに保存し、その写真情報をデータベースに挿入します。

    写真の表示
ユーザーがアップロードした写真のタグに基づいて写真を分類して表示します。サーバー側では、データベースにクエリを実行し、特定のタグで写真をフィルタリングし、表示するためにクライアントに返す必要があります。以下はサンプル コードです。

func getPhotos(w http.ResponseWriter, r *http.Request) {
    tag := r.FormValue("tag")
    var photos []Photo
    if tag == "" {
        db.Find(&photos)
    } else {
        db.Where("tag=?", tag).Find(&photos)
    }
    result := make([]string, len(photos))
    for i, photo := range photos {
        result[i] = photo.Path
    }
    jsonBytes, err := json.Marshal(result)
    if err != nil {
        fmt.Println(err)
        return
    }
    w.Write(jsonBytes)
}
ログイン後にコピー

上記のコードでは、まずユーザーが要求したタグに基づいてデータベースにクエリを実行し、条件を満たす写真パスのリストを取得します。次に、写真パスのリストを json 形式に変換し、クライアントに返します。

フロントエンド ページでは、Masonry.js ライブラリを使用してフォト ウォールのレイアウトを実装できます。サンプル コードは次のとおりです:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>照片墙</title>
        <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/masonry/4.2.2/masonry.pkgd.min.js"></script>
        <style>
            .photo {
                width: 200px;
                margin: 10px;
            }
        </style>
    </head>
    <body>
        <input type="text" id="tag">
        <button onclick="getPhotos()">搜索</button>
        <div id="container">
            <div class="grid-sizer"></div>
        </div>
    </body>
    <script>
        function getPhotos() {
            var tag = document.getElementById("tag").value;
            $.ajax({
                url: "/getPhotos",
                type: "GET",
                data: {"tag": tag},
                success: function (data) {
                    var html = "";
                    for (var i = 0; i < data.length; i++) {
                        html += '<div class="photo"><img src="' + data[i] + '"></div>';
                    }
                    $("#container").html(html);
                    var $container = $('#container');
                    $container.imagesLoaded(function () {
                        $container.masonry({
                            itemSelector: ".photo",
                            columnWidth: ".grid-sizer",
                            gutter: 10
                        });
                    });
                }
            });
        }
    </script>
</html>
ログイン後にコピー
クライアントでは、指定されたラベルの写真リストを取得するための ajax リクエスト。次に、写真リストが写真ノードに動的に生成され、Masonry.js ライブラリを使用してフォト ウォール スタイルのレイアウトが実装されます。

5. まとめ

今回の実装では、golang言語を使用してフォトウォール機能を実装しました。写真をアップロードして表示するプロセスを実装することで、golang 言語がファイル操作とデータベース操作をサポートしていることを学びました。新興のプログラミング言語である golang は、構文の単純さと効率という点で利点があるだけでなく、同時プログラミングもサポートしており、高い同時実行性と大量のデータを処理するアプリケーション シナリオで独自の役割を果たしています。将来的には、golang 言語をさらに深く学習、探索、応用し続けることができます。

以上がGolang がフォトウォールを実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート