Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Membetulkan Ralat \'Permintaan Buruk: tiada foto dalam permintaan\' Semasa Menghantar Fail ke Bot Telegram dengan Golang?

Bagaimana untuk Membetulkan Ralat \'Permintaan Buruk: tiada foto dalam permintaan\' Semasa Menghantar Fail ke Bot Telegram dengan Golang?

DDD
DDDasal
2024-11-02 16:01:02715semak imbas

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

Menghantar Fail dengan Permintaan POST di Golang untuk Pembangunan Bot Telegram

Masalah: Ralat 'Permintaan Buruk: tiada foto dalam permintaan' semasa memuat naik fail

Dalam percubaan untuk menulis fungsi untuk memuat naik fail ke Telegram melalui permintaan POST, anda mengalami ralat "Permintaan Buruk: tiada foto dalam permintaan." Pendekatan awal anda menggunakan fungsi SendPostRequest terbukti tidak berjaya.

Penyelesaian yang Diperbaiki

Selepas penyelidikan menyeluruh, penyelesaian yang dipertingkatkan berikut ditemui:

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

Penyelesaian yang dikemas kini ini menggunakan borang berbilang bahagian data untuk menghantar fail, yang menyelesaikan isu dan memastikan bahawa fail itu ada dalam permintaan.

Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Ralat \'Permintaan Buruk: tiada foto dalam permintaan\' Semasa Menghantar Fail ke Bot Telegram dengan Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn