Maison > développement back-end > Golang > le corps du texte

Comment implémenter le téléchargement de fichiers asynchrone à l'aide de Golang ?

王林
Libérer: 2024-06-05 13:20:57
original
489 Les gens l'ont consulté

Comment implémenter le téléchargement de fichiers asynchrone avec Go ? Utilisez http.MultipartFile pour gérer les téléchargements de fichiers, qui prennent en charge les téléchargements simultanés. Créez une goroutine pour télécharger des fichiers de manière asynchrone sans bloquer le thread principal. Utilisez io.Copy pour écrire le contenu du fichier dans un nouveau fichier. Imprimez un message de journal après un téléchargement réussi.

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

Comment implémenter le téléchargement de fichiers asynchrone à l'aide de Golang

Le téléchargement de fichiers asynchrone est une technologie qui vous permet de télécharger des fichiers sur le serveur sans bloquer le thread principal. Ceci est utile pour les téléchargements de fichiers volumineux ou pour les applications qui doivent continuer à effectuer des tâches pendant le téléchargement. Le langage Go fournit un type http.MultipartFile intégré pour gérer les téléchargements de fichiers, qui prend en charge les téléchargements simultanés. 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")
}
Copier après la connexion

实战案例

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

运行示例

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

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

🎜Exemple de code🎜🎜🎜Ce qui suit est un exemple d'utilisation du langage Go pour implémenter le téléchargement de fichiers asynchrone : 🎜rrreee🎜🎜Cas pratique🎜🎜🎜Cet exemple est un simple service de téléchargement de fichiers qui peut être téléchargé via POST Demande qu'un fichier soit téléchargé sur le serveur. Les fichiers sont téléchargés de manière asynchrone dans le répertoire <code>uploads et un message de journal est imprimé lorsque le téléchargement réussit. 🎜🎜🎜Exécutez les exemples🎜🎜
  1. Installez Go en utilisant votre environnement Go préféré.
  2. Clonez ou téléchargez l'exemple de code.
  3. Ouvrez un terminal et accédez au répertoire des exemples.
  4. Exécutez go run main.go.
  5. Utilisez un navigateur ou un outil client HTTP pour envoyer une requête POST à http://localhost:8080/upload, qui contient un fichier nommé file
. 🎜Si le fichier a été téléchargé avec succès, vous devriez voir un message de journal similaire à Fichier example.txt téléchargé avec succès. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal