Go で非同期ファイルアップロードを実装するにはどうすればよいですか? http.MultipartFile を使用してファイルのアップロードを処理し、同時アップロードをサポートします。メインスレッドをブロックせずにファイルを非同期にアップロードするゴルーチンを作成します。 io.Copy を使用して、ファイルの内容を新しいファイルに書き込みます。アップロードが成功した後、ログ メッセージを出力します。
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
目录,并且在上传成功后打印一条日志消息。
运行示例
go run main.go
。POST
请求到 http://localhost:8080/upload
,其中包含一个名为 file
的文件字段。如果文件上传成功,你应该会看到一条类似于 文件 example.txt 已成功上传
POST ファイルをサーバーにアップロードするように要求します。ファイルは <code>uploads
ディレクトリに非同期でアップロードされ、アップロードが成功するとログ メッセージが出力されます。 🎜🎜🎜サンプルを実行します🎜🎜go run main.go
を実行します。 POST
リクエストを http://localhost:8080/upload
に送信します。このリクエストには、fileFile example.txt が正常にアップロードされました
のようなログ メッセージが表示されます。 🎜以上がGolang を使用して非同期ファイルアップロードを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。