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