Heim  >  Artikel  >  Backend-Entwicklung  >  Wie behebe ich den Fehler „Fehlerhafte Anfrage: Die Anfrage enthält kein Foto“ beim Senden von Dateien an Telegram-Bots mit Golang?

Wie behebe ich den Fehler „Fehlerhafte Anfrage: Die Anfrage enthält kein Foto“ beim Senden von Dateien an Telegram-Bots mit Golang?

DDD
DDDOriginal
2024-11-02 16:01:02650Durchsuche

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

Senden einer Datei mit einer POST-Anfrage in Golang für die Telegram-Bot-Entwicklung

Problem: Fehler „Fehlerhafte Anfrage: Die Anfrage enthält kein Foto“ beim Hochladen einer Datei

Beim Versuch, eine Funktion zum Hochladen einer Datei auf Telegram über eine POST-Anfrage zu schreiben, ist der Fehler „Ungültige Anfrage: Die Anfrage enthält kein Foto“ aufgetreten. Ihr ursprünglicher Ansatz mit der SendPostRequest-Funktion erwies sich als erfolglos.

Verbesserte Lösung

Nach gründlicher Recherche wurde die folgende verbesserte Lösung gefunden:

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

Diese aktualisierte Lösung verwendet ein mehrteiliges Formular Daten zum Senden der Datei, wodurch das Problem behoben und sichergestellt wird, dass die Datei in der Anfrage vorhanden ist.

Das obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „Fehlerhafte Anfrage: Die Anfrage enthält kein Foto“ beim Senden von Dateien an Telegram-Bots mit Golang?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn