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

Comment corriger l'erreur « Mauvaise demande : il n'y a pas de photo dans la demande » lors de l'envoi de fichiers aux robots Telegram avec Golang ?

DDD
Libérer: 2024-11-02 16:01:02
original
652 Les gens l'ont consulté

How to Fix the 'Bad Request: there is no photo in the request' Error When Sending Files to Telegram Bots with Golang?

Envoi d'un fichier avec une requête POST dans Golang pour le développement de Telegram Bot

Problème : erreur « Mauvaise demande : il n'y a pas de photo dans la demande » lors du téléchargement d'un fichier

En essayant d'écrire une fonction permettant de télécharger un fichier sur Telegram via une requête POST, vous avez rencontré l'erreur « Mauvaise demande : il n'y a pas de photo dans la demande. » Votre approche initiale utilisant la fonction SendPostRequest s'est avérée infructueuse.

Solution améliorée

Après une recherche approfondie, la solution améliorée suivante a été trouvée :

<code class="go">import (
    "bytes"
    "io"
    "mime/multipart"
    "net/http"
    "path/filepath"
)

// content is a struct which contains a file's name, its type and its data.
type content struct {
    fname string
    ftype string
    fdata []byte
}

func sendPostRequest(url string, files ...content) ([]byte, error) {
    var (
        buf = new(bytes.Buffer)
        w   = multipart.NewWriter(buf)
    )

    // Iterate over the files and add them as form fields
    for _, f := range files {
        part, err := w.CreateFormFile(f.ftype, filepath.Base(f.fname))
        if err != nil {
            return []byte{}, err
        }

        _, err = part.Write(f.fdata)
        if err != nil {
            return []byte{}, err
        }
    }

    // Close the multipart writer
    err := w.Close()
    if err != nil {
        return []byte{}, err
    }

    // Create a new POST request
    req, err := http.NewRequest("POST", url, buf)
    if err != nil {
        return []byte{}, err
    }

    // Set the Content-Type header
    req.Header.Add("Content-Type", w.FormDataContentType())

    // Create a new HTTP client
    client := &http.Client{}

    // Send the request
    res, err := client.Do(req)
    if err != nil {
        return []byte{}, err
    }

    // Close the response body
    defer res.Body.Close()

    // Read the response body
    cnt, err := io.ReadAll(res.Body)
    if err != nil {
        return []byte{}, err
    }

    return cnt, nil
}</code>
Copier après la connexion

Cette solution mise à jour utilise un formulaire en plusieurs parties. données pour envoyer le fichier, ce qui résout le problème et garantit que le fichier est présent dans la demande.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!