Maison  >  Article  >  développement back-end  >  Comment télécharger des fichiers sur Telegram avec des requêtes POST dans Golang ?

Comment télécharger des fichiers sur Telegram avec des requêtes POST dans Golang ?

DDD
DDDoriginal
2024-11-04 07:49:30181parcourir

How to Upload Files to Telegram with POST Requests in Golang?

Télécharger un fichier avec une requête POST dans Go

Télécharger un fichier via une requête HTTP POST peut être une tâche complexe, en particulier lorsqu'il s'agit de tiers des API de fête comme Telegram. Pour résoudre ce problème, explorons une fonction personnalisée écrite en Golang qui gère efficacement les téléchargements de fichiers.

Problème :

Vous avez rencontré une erreur de Telegram indiquant une photo manquante. dans la demande, même après avoir suivi des solutions en ligne infructueuses.

Extrait de code :

L'extrait de code fourni tente de télécharger un fichier à l'aide de la fonction os.Open(), mais il échoue en raison des exigences spécifiques de l'API de Telegram.

Solution :

Pour résoudre ce problème, nous allons créer une fonction sendPostRequest personnalisée qui utilise un multipart/form- demande de données pour gérer les téléchargements de fichiers. Cette méthode est largement prise en charge par les serveurs Web et les API. Voici le code mis à jour :

<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)
    )

    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
        }
    }

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

    req, err := http.NewRequest("POST", url, buf)
    if err != nil {
        return []byte{}, err
    }
    req.Header.Add("Content-Type", w.FormDataContentType())

    client := &http.Client{}
    res, err := client.Do(req)
    if err != nil {
        return []byte{}, err
    }
    defer res.Body.Close()

    cnt, err := io.ReadAll(res.Body)
    if err != nil {
        return []byte{}, err
    }
    return cnt, nil
}</code>

Comprendre la solution :

La fonction sendPostRequest accepte une URL et un nombre variable de structures de contenu, chacune représentant un fichier à téléchargé. Il construit une requête HTTP en plusieurs parties, dans laquelle chaque fichier est inclus avec ses métadonnées (nom, type et données). Ce format garantit la compatibilité avec l'API de Telegram.

Utilisation :

Vous pouvez appeler la fonction sendPostRequest avec les informations de votre fichier et recevoir la réponse du serveur dans la variable cnt. Par exemple :

<code class="go">resp, err := sendPostRequest("https://your-url.com", content{fname: "photo.jpg", ftype: "image/jpeg", fdata: []byte{your_file_data}})
if err != nil {
    // Handle error
}</code>

Conclusion :

Cette fonction sendPostRequest personnalisée résout le problème du téléchargement de fichiers via des requêtes POST dans Golang, en répondant spécifiquement aux exigences de téléchargement de fichiers de Telegram. En utilisant multipart/form-data, il garantit la compatibilité et facilite le téléchargement de fichiers sur des serveurs distants.

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!

Déclaration:
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