Heim > Backend-Entwicklung > Golang > Wie behebt man den Fehler „Fehlerhafte Anfrage: Die Anfrage enthält kein Foto' beim Hochladen von Dateien auf Telegram-Bots in Go?

Wie behebt man den Fehler „Fehlerhafte Anfrage: Die Anfrage enthält kein Foto' beim Hochladen von Dateien auf Telegram-Bots in Go?

Susan Sarandon
Freigeben: 2024-11-03 18:58:02
Original
995 Leute haben es durchsucht

How to Fix

Hochladen von Dateien mit POST-Anfragen in Go für Telegram

In Go können Sie Dateien mithilfe des http-Pakets auf Telegram-Bots hochladen. Es ist jedoch eine Fehlermeldung aufgetreten: „Ungültige Anfrage: Die Anfrage enthält kein Foto.“ Dies weist darauf hin, dass die Dateidaten nicht korrekt in Ihrer Anfrage enthalten sind.

Um dieses Problem zu beheben, kann der folgende Code verwendet werden:

<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>
Nach dem Login kopieren

Dieser Code verwendet das Multipart-Paket, um ein zu erstellen Multipart-/Formulardatenanforderung, die die Dateidaten enthält. Die Inhaltsstruktur stellt eine Datei mit Namen, Typ und Daten dar. Die sendPostRequest-Funktion nimmt eine URL und eine variable Anzahl von Inhaltsobjekten, erstellt die mehrteilige Anfrage, sendet sie und gibt die Antwort zurück.

In Ihrem Fall können Sie diesen Code verwenden, um eine Datei auf einen Telegram-Bot hochzuladen API:

<code class="go">func SendPostRequest(url string, filename string) []byte {
    file, err := os.Open(filename)
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    stat, err := file.Stat()
    if err != nil {
        log.Fatal(err)
    }

    fileData, err := ioutil.ReadAll(file)
    if err != nil {
        log.Fatal(err)
    }

    return sendPostRequest(url,
        content{filename, "photo/jpeg", fileData},
    )
}</code>
Nach dem Login kopieren

Dieser Code öffnet die Datei, liest ihren Inhalt in ein Byte-Slice und verwendet sendPostRequest, um die Datei an die API zu senden.

Das obige ist der detaillierte Inhalt vonWie behebt man den Fehler „Fehlerhafte Anfrage: Die Anfrage enthält kein Foto' beim Hochladen von Dateien auf Telegram-Bots in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage