ホームページ バックエンド開発 Golang Beego での添付ファイルのアップロード - Web アプリケーションをよりリッチにします

Beego での添付ファイルのアップロード - Web アプリケーションをよりリッチにします

Jun 23, 2023 am 11:04 AM
ウェブアプリケーション beego(フレームワーク) ファイルの更新

Web アプリケーションの継続的な開発に伴い、ユーザーはより豊富な機能とエクスペリエンスを求める要求がますます高まっています。その中でも、添付ファイルのアップロードは基本的かつ重要な機能であり、ユーザーが自分のファイルをアップロードして共有できるだけでなく、開発者がアバターのアップロード、画像の表示、ファイルのダウンロードなどのさまざまなビジネスシナリオを簡単に実装できるようにします。 。

Beego は Go 言語に基づく Web フレームワークであり、開発者が効率的でスケーラブルで安全な Web アプリケーションを迅速に構築できるようにする豊富な機能とツールを提供します。 Beego では、組み込みの添付ファイルアップロードツールを使用して、Web アプリケーションに添付ファイルのアップロード機能を簡単に実装できます。

この記事では、Beego の添付ファイルのアップロード機能の使用方法を紹介し、実際的な考慮事項と最適化のヒントをいくつか示します。

1. Beego の添付ファイル アップロード機能を使用する

Beego で添付ファイル アップロード機能を実装するための鍵は、組み込みのファイル アップロード ツール - beego.Context.Input を使用することです。このツールには、RetrieveFile (アップロードされたファイルを取得する) と SaveToFile (アップロードされたファイルをディスクに保存する) という 2 つのメソッドが用意されています。

以下は、簡単な添付ファイルのアップロードのサンプル コードです:

// 控制器代码
func (c *AttachmentController) Post() {
    _, header, err := c.GetFile("att_file")
    if err != nil {
        // 处理上传失败的情况
        c.Data["json"] = map[string]interface{}{
            "code":    1,
            "message": "Upload failed",
        }
    } else {
        // 处理上传成功的情况
        err = c.SaveToFile("att_file", header.Filename)
        if err != nil {
            c.Data["json"] = map[string]interface{}{
                "code":    1,
                "message": "Save file failed",
            }
        } else {
            c.Data["json"] = map[string]interface{}{
                "code":    0,
                "message": "Upload success",
            }
        }
    }
    c.ServeJSON()
}

// 视图代码
<form method="post" enctype="multipart/form-data" action="/attachment/upload">
  <input type="file" name="att_file" required>
  <input type="submit" value="Upload">
</form>
ログイン後にコピー

上記のコードでは、コントローラーの c.GetFile("att_file") メソッドを通じてアップロードされたファイルを取得します。メソッドが err を返した場合、アップロードが失敗したことを意味するため、インターフェイスで対応するエラー情報を返すことができます。アップロードが成功した場合は、c.SaveToFile("att_file", header.Filename) メソッドを通じてファイルをディスクに保存し、成功情報を返します。

ビューの enctype="multipart / form-data" 属性を通じて、フォームの enctype 属性をマルチパート フォーム データ型として指定していることに注意してください。これは、添付ファイルのアップロードで複数のデータをサポートする必要があるためです。 types.ファイルなので、この属性は必須です。

2. 関連する設定

実際の開発では、ファイル サイズの制限、アップロードが許可されるファイルの種類、アップロードされるファイルのディレクトリなど、添付ファイルのアップロードに関するいくつかの設定を行う必要があります。

関連する設定は、beego.AppConfig の設定ファイルで行うことができます。例:

# 支持的文件类型
file_types = ["jpg", "jpeg", "png", "gif", "txt", "doc", "docx", "pdf"]

# 上传文件大小限制
file_size = 10 << 20

# 上传文件目录
attachment_dir = "static/upload"
ログイン後にコピー

上記の設定では、ユーザーがアップロードしたファイルのサイズを 10M (10<) 以下に制限しています。 ;< 20 はバイトに変換されることを意味します)、ユーザーがアップロードできるファイル タイプには、jpg、jpeg、png、gif、txt、doc、docx、pdf が含まれ、アップロードされたファイルの保存ディレクトリは static/upload として指定されます。

Beego での設定ファイルの読み取りは、os.Setenv (「環境変数名」、「変数値」) メソッドを通じて設定できる環境変数の読み取りに基づいていることに注意してください。例:

os.Setenv("file_types", `["jpg", "jpeg", "png", "gif", "txt", "doc", "docx", "pdf"]`)
ログイン後にコピー

3. 添付ファイルのアップロードの最適化

基本的な添付ファイルのアップロード機能を実現することに加えて、いくつかの追加の問題にも注意する必要があります。

  1. 画像のスケーリング

実際のアプリケーションでは、通常、アップロードされた画像を拡大縮小して調整する必要があります。 Beego は、画像を簡単に処理できる 2 つのツール クラス、ImageCropper と ImageFilter を提供します。例:

import (
    "github.com/astaxie/beego/utils/captcha"
    "github.com/astaxie/beego/utils/captcha/drivers"
)

func (c *AttachmentController) Post() {
    f, h, err := c.GetFile("att_file")
    if err != nil {
        // 处理上传失败的情况
        c.Data["json"] = map[string]interface{}{
            "code":    1,
            "message": "Upload failed",
        }
    } else {
        // 处理上传成功的情况
        fileDir := beego.AppConfig.String("attachment_dir")
        fileName := beego.Date(time.Now(), "20060102150405")+filepath.Ext(h.Filename)
        fPath := fileDir + "/" + fileName
        err = c.SaveToFile("att_file", fPath)
        if err != nil {
            c.Data["json"] = map[string]interface{}{
                "code":    1,
                "message": "Save file failed",
            }
        } else {
            c.Data["json"] = map[string]interface{}{
                "code":    0,
                "message": "Upload success",
                "url":     "/"+fPath,
            }
            fUrl := beego.URLFor("AttachmentController.ShowAttachment", ":filename", fileName)
            c.Data["json"].(map[string]interface{})["url"] = fUrl
        }

        // 图片缩放
        scaleWidth := 800 // 等比例缩放至800
        imageCropper := captcha.NewImageCrop(captcha.DriverImaging, fPath)
        err := imageCropper.Resize(scaleWidth)
        if err != nil {
            beego.Error(err)
        }

        // 图片滤镜
        imageFilter := captcha.NewImageFilter(captcha.DriverImaging, fPath)
        err = imageFilter.Hue(-25).Saturation(10).Brightness(-10).Contrast(-5)
        if err != nil {
            beego.Error(err)
        }
    }
    c.ServeJSON()
}
ログイン後にコピー

上記のコードでは、ImageCropper ツール クラスと ImageFilter ツール クラスを使用して、それぞれ画像の均等なスケーリングとカラー処理を実現します。

  1. ブロックされたアップロード

一部の大きなファイルの場合、1 回限りのアップロードでは遅延やタイムアウトの問題が発生することがよくあります。ユーザー エクスペリエンスを向上させるために、分割ブロック アップロードを使用できます。方法。 Beego は、フォーム データを解析して処理できる MultipartReader ツール クラスを提供します。例:

func (c *AttachmentController) ChunkUpload() {
    // 读取表单数据
    reader, _ := c.Ctx.Request.MultipartReader()
    var (
        bigFile *os.File
        noi     int
    )
    for {
        part, err := reader.NextPart()
        if err == io.EOF {
            // 读取完成
            break
        }
        if part.FileName() == "" {
            continue
        }
        fileName := part.FileName()
        bigFile, err = os.OpenFile("static/chunk/"+fileName, os.O_WRONLY|os.O_CREATE, 0666)
        defer bigFile.Close()
        if err != nil {
            c.Data["json"] = map[string]interface{}{
                "code":    1,
                "message": "Create file failed",
            }
            c.ServeJSON()
            return
        }
        buf := make([]byte, 1024*1024) // 1MB的缓存
        for {
            n := 0
            n, err = part.Read(buf)
            noi += n // 总共读取的字节数
            if err != nil {
                if err == io.EOF {
                    break
                } else {
                    c.Data["json"] = map[string]interface{}{
                        "code":    1,
                        "message": "Read file failed",
                    }
                    c.ServeJSON()
                    return
                }
            }
            if _, err = bigFile.Write(buf[:n]); err != nil {
                c.Data["json"] = map[string]interface{}{
                    "code":    1,
                    "message": "Write file failed",
                }
                c.ServeJSON()
                return
            }
        }
    }
    // 返回上传结果
    c.Data["json"] = map[string]interface{}{
        "code":     0,
        "message":  "Upload success",
        "fileSize": noi,
    }
    c.ServeJSON()
}
ログイン後にコピー

上記のコードでは、MultipartReader ツール クラスを使用してフォーム データをチャンクで読み取り、毎回 1 MB のデータを読み取り、一時ファイルに書き込みます。最後に、すべてのチャンク ファイルを完全なファイルに非同期的にマージします。

4. 概要

この記事では、Beego の添付ファイルのアップロード機能を紹介し、いくつかの実際的な問題について説明および最適化しました。 Beegoの添付ファイルアップロードツールを利用することで、さまざまなWebアプリケーションの添付ファイルアップロード機能を簡単に実装でき、ユーザーエクスペリエンスと開発効率が向上します。

以上がBeego での添付ファイルのアップロード - Web アプリケーションをよりリッチにしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Golang を使用してシングルページ Web アプリケーションを開発する方法 Golang を使用してシングルページ Web アプリケーションを開発する方法 Jun 05, 2023 am 09:51 AM

インターネットの継続的な発展に伴い、Web アプリケーションの需要も増加しています。以前は、Web アプリケーションは通常複数のページで構成されていましたが、現在ではシングル ページ アプリケーション (SPA) を使用するアプリケーションが増えています。シングルページ アプリケーションはモバイル アクセスに非常に適しており、ユーザーはページ全体がリロードされるまで待つ必要がないため、ユーザー エクスペリエンスが向上します。この記事では、Golang を使用して SPA アプリケーションを開発する方法を紹介します。シングル ページ アプリケーションとは何ですか? シングル ページ アプリケーションとは、HTML ファイルが 1 つだけ含まれる Web アプリケーションを指します。 Javaを使用します

FastAPI フレームワークを使用して国際的な Web アプリケーションを構築する FastAPI フレームワークを使用して国際的な Web アプリケーションを構築する Sep 29, 2023 pm 03:53 PM

FastAPI フレームワークを使用して国際的な Web アプリケーションを構築します。FastAPI は、Python 型の注釈と高性能の非同期サポートを組み合わせた高性能 Python Web フレームワークで、Web アプリケーションの開発をよりシンプル、高速、信頼性の高いものにします。国際的な Web アプリケーションを構築する場合、FastAPI は、アプリケーションで複数の言語を簡単にサポートできるようにする便利なツールと概念を提供します。以下に、FastAPI フレームワークを使用してビルドする方法を紹介する具体的なコード例を示します。

PHP8 は JIT コンパイルを通じて Web アプリケーションのパフォーマンスをどのように向上させますか? PHP8 は JIT コンパイルを通じて Web アプリケーションのパフォーマンスをどのように向上させますか? Oct 18, 2023 am 08:04 AM

PHP8 は JIT コンパイルを通じて Web アプリケーションのパフォーマンスをどのように向上させますか? Web アプリケーションの継続的な開発と需要の増加に伴い、Web アプリケーションのパフォーマンスの向上が開発者の焦点の 1 つになっています。一般的に使用されるサーバーサイド スクリプト言語として、PHP は常に開発者に愛されてきました。 JIT (ジャストインタイム コンパイル) コンパイラーは PHP8 で導入され、開発者に新しいパフォーマンス最適化ソリューションを提供します。この記事では、PHP8 が JIT コンパイルを通じて Web アプリケーションのパフォーマンスを向上させる方法について詳しく説明し、具体的なコード例を示します。

Django を使用して大規模な Web アプリケーションを構築するためのベスト プラクティス Django を使用して大規模な Web アプリケーションを構築するためのベスト プラクティス Jun 22, 2023 pm 09:52 PM

インターネットの普及と発展に伴い、Web アプリケーションは今日の社会に不可欠かつ重要な部分になりました。大規模な Web アプリケーションの場合、効率的でスケーラブルで保守可能なフレームワークが不可欠です。このような状況下で、Django は、開発者が高品質の Web アプリケーションを迅速に構築できるように多くのベスト プラクティスを採用しているため、人気の Web フレームワークになりました。この記事では、Django を使用して大規模な Web アプリケーションを構築するためのベスト プラクティスをいくつか紹介します。

Beego を使用してマイクロサービス アーキテクチャで Web アプリケーションを開発する Beego を使用してマイクロサービス アーキテクチャで Web アプリケーションを開発する Jun 23, 2023 am 08:39 AM

インターネットの発展とアプリケーションの普及に伴い、Web アプリケーションの需要も成長し続けています。多数のユーザーのニーズを満たすために、従来の Web アプリケーションはパフォーマンスのボトルネックやスケーラビリティの問題に直面することがよくあります。これらの問題に対応して、マイクロサービス アーキテクチャが徐々に Web アプリケーション開発のトレンドおよびソリューションになってきました。マイクロサービス アーキテクチャでは、Beego フレームワークが多くの開発者の最初の選択肢となり、その効率性、柔軟性、使いやすさが開発者に深く愛されています。この記事では、Beego フレームワークを使用してマイクロサービス アーキテクチャで Web アプリケーションを開発する方法を紹介します。

Web アプリケーションを開発する場合、適切な Go フレームワークを選択するにはどうすればよいでしょうか? Web アプリケーションを開発する場合、適切な Go フレームワークを選択するにはどうすればよいでしょうか? Jun 05, 2023 am 11:21 AM

インターネット技術の継続的な発展により、Web アプリケーションは人々の生活や仕事に不可欠な部分になりました。 Web アプリケーション開発では、適切なフレームワークを選択することが、開発効率の向上、開発のスピードアップ、コード品質の向上に重要な役割を果たします。この記事では、Go フレームワークとは何か、Go フレームワークの利点、適切な Go フレームワークを選択する方法の 3 つの側面から Go フレームワークの選択を分析します。 1. Go フレームワークとは何ですか? Go は、高性能 Web アプリケーションの構築に最適なオープンソース プログラミング言語です。

PHP と SOAP を使用して Web ベースのアプリケーションを構築するための完全なガイド PHP と SOAP を使用して Web ベースのアプリケーションを構築するための完全なガイド Jul 30, 2023 am 10:25 AM

PHP と SOAP を使用して Web ベースのアプリケーションを構築するための完全ガイド 今日のインターネット時代において、Web ベースのアプリケーションはデータを管理し、データと対話するための重要なツールとなっています。 PHP は強力な開発言語として他のテクノロジーとシームレスに統合でき、XML ベースの通信プロトコルである SOAP (Simple Object Access Protocol) は、Web サービスを構築するためのシンプルで標準的かつ拡張可能な方法を提供します。この記事では、次のことを提供します

ThinkPHP6 で効率的な Web アプリケーションを作成する ThinkPHP6 で効率的な Web アプリケーションを作成する Jun 21, 2023 pm 05:24 PM

Web アプリケーションの普及に伴い、アプリケーションを効率的かつ迅速に構築する方法を求める開発者がますます増えています。近年、ThinkPHP6 は優れた PHP フレームワークとして、徐々にこの分野全体のリーダーになりつつあります。この記事では、ThinkPHP6 を使用して効率的な Web アプリケーションを作成し、ビジネスのさまざまな課題に簡単に対処できるようにする方法を紹介します。 1. ThinkPHP6 の概要 ThinkPHP6 は、開発者に次の機能を提供する軽量で高性能な PHP フレームワークです。

See all articles