Golang を使用して非同期ファイルアップロードを実装するにはどうすればよいですか?

王林
リリース: 2024-06-05 13:20:57
オリジナル
483 人が閲覧しました

Go で非同期ファイルアップロードを実装するにはどうすればよいですか? http.MultipartFile を使用してファイルのアップロードを処理し、同時アップロードをサポートします。メインスレッドをブロックせずにファイルを非同期にアップロードするゴルーチンを作成します。 io.Copy を使用して、ファイルの内容を新しいファイルに書き込みます。アップロードが成功した後、ログ メッセージを出力します。

如何使用 Golang 实现异步文件上传?

Golangを使用して非同期ファイルアップロードを実装する方法

非同期ファイルアップロードは、メインスレッドをブロックせずにサーバーにファイルをアップロードできるテクノロジーです。これは、大きなファイルのアップロードや、アップロード中にタスクを実行し続ける必要があるアプリケーションに役立ちます。 Go 言語には、同時アップロードをサポートするファイルのアップロードを処理するための組み込みの http.MultipartFile 型が用意されています。 http.MultipartFile 类型来处理文件上传,它支持并发上传。

代码示例

以下是一个使用 Go 语言实现异步文件上传的示例:

package main

import (
    "context"
    "fmt"
    "io"
    "log"
    "net/http"

    "github.com/gin-gonic/gin"
)

func main() {
    router := gin.Default()

    // 文件上传处理程序
    router.POST("/upload", func(c *gin.Context) {
        // 获取 multipart 文件
        file, header, err := c.Request.FormFile("file")
        if err != nil {
            c.JSON(http.StatusBadRequest, gin.H{
                "error": fmt.Sprintf("获取文件失败: %s", err.Error()),
            })
            return
        }

        // 创建一个 goroutine 来异步上传文件
        go func() {
            ctx := context.Background()

            // 创建一个新文件并在其中写入
            dst, err := os.Create(fmt.Sprintf("uploads/%s", header.Filename))
            if err != nil {
                log.Printf("创建文件失败: %s", err.Error())
                return
            }
            defer dst.Close()

            if _, err := io.Copy(dst, file); err != nil {
                log.Printf("写入文件失败: %s", err.Error())
                return
            }

            log.Printf("文件 %s 已成功上传", header.Filename)
        }()

        c.JSON(http.StatusOK, gin.H{
            "status": "success",
        })
    })

    router.Run(":8080")
}
ログイン後にコピー

实战案例

这个示例是一个简单的文件上传服务,可以通过 POST 请求将文件上传到服务器。文件被异步上传到 uploads 目录,并且在上传成功后打印一条日志消息。

运行示例

  1. 使用你最喜欢的 Go 环境安装 Go。
  2. 克隆或下载代码示例。
  3. 打开终端并导航到示例目录。
  4. 运行 go run main.go
  5. 使用浏览器或 HTTP 客户端工具发送一个 POST 请求到 http://localhost:8080/upload,其中包含一个名为 file 的文件字段。

如果文件上传成功,你应该会看到一条类似于 文件 example.txt 已成功上传

🎜コード例🎜🎜🎜以下は、Go 言語を使用して非同期ファイル アップロードを実装する例です: 🎜rrreee🎜🎜実用的なケース🎜🎜🎜この例は、POST ファイルをサーバーにアップロードするように要求します。ファイルは <code>uploads ディレクトリに非同期でアップロードされ、アップロードが成功するとログ メッセージが出力されます。 🎜🎜🎜サンプルを実行します🎜🎜
  1. お気に入りの Go 環境を使用して Go をインストールします。
  2. コードサンプルのクローンを作成するか、ダウンロードします。
  3. ターミナルを開き、サンプル ディレクトリに移動します。
  4. go run main.go を実行します。
  5. ブラウザまたは HTTP クライアント ツールを使用して、POST リクエストを http://localhost:8080/upload に送信します。このリクエストには、file
のファイルフィールド。 🎜 ファイルが正常にアップロードされた場合は、File example.txt が正常にアップロードされました のようなログ メッセージが表示されます。 🎜

以上がGolang を使用して非同期ファイルアップロードを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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