Maison > développement back-end > Golang > Comment gérer correctement les téléchargements de fichiers dans les requêtes POST Multipart/Form-Data avec Go ?

Comment gérer correctement les téléchargements de fichiers dans les requêtes POST Multipart/Form-Data avec Go ?

Linda Hamilton
Libérer: 2024-12-01 07:32:11
original
251 Les gens l'ont consulté

How to Properly Handle File Uploads in Multipart/Form-Data POST Requests with Go?

Dépannage du POST Multipart/Form-Data dans Go

Dans le contexte de l'envoi d'un formulaire multipart à l'aide des packages mime/multipart et http de Go, vous pouvez rencontrer certains problèmes qui nécessitent un dépannage. Examinons un cas spécifique lié à la création d'un champ de fichier.

Le problème

Vous disposez du code suivant et essayez d'envoyer un formulaire en plusieurs parties avec à la fois des champs de texte et un fichier :

func main() {
    // ...

    // Create a file field
    fw, err := w.CreateFormFile("file", "filename.dat")
    if err != nil {
        return err
    }

    // ...

    // Send the request
    resp, err := http.Post(url, w.FormDataContentType(), &buffer)
    if err != nil {
        return err
    }

    // ...
}
Copier après la connexion

Cependant, vous avez du mal à obtenir un Reader pour lire le fichier dans le champ Writer fw du fichier.

Le Solution

Pour résoudre ce problème, vous devez ouvrir le fichier à l'aide de os.Open et transmettre le *os.File renvoyé en tant que io.Writer à la fonction CreateFormFile. Voici le code corrigé :

import (
    "bytes"
    "io"
    "mime/multipart"
    "net/http"
    "os"
)

func main() {
    // ...

    // Open the file
    fd, err := os.Open("filename.dat")
    if err != nil {
        return err
    }

    // Create a file field
    fw, err := w.CreateFormFile("file", "filename.dat")
    if err != nil {
        return err
    }

    // Copy the file contents into the file field writer
    _, err = io.Copy(fw, fd)
    if err != nil {
        return err
    }

    // ...

    // Send the request
    resp, err := http.Post(url, w.FormDataContentType(), &buffer)
    if err != nil {
        return err
    }

    // ...
}
Copier après la connexion

Avec cette modification, le contenu du fichier sera correctement écrit dans le formulaire en plusieurs parties, vous permettant d'envoyer à la fois des champs de texte et un fichier 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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal