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