Bagaimana untuk Memuat naik Fail ke Telegram dengan Permintaan POST di Golang?

DDD
Lepaskan: 2024-11-04 07:49:30
asal
178 orang telah melayarinya

How to Upload Files to Telegram with POST Requests in Golang?

Muat naik Fail dengan Permintaan POST dalam Go

Memuat naik fail melalui permintaan HTTP POST boleh menjadi tugas yang rumit, terutamanya apabila berurusan dengan pihak ketiga -API pihak seperti Telegram. Untuk menangani perkara ini, mari kita terokai fungsi tersuai yang ditulis dalam Golang yang mengendalikan muat naik fail dengan cekap.

Isu:

Anda telah menghadapi ralat daripada Telegram yang menunjukkan foto hilang dalam permintaan, walaupun selepas mengikuti penyelesaian dalam talian yang tidak berjaya.

Coretan Kod:

Coretan kod yang disediakan cuba memuat naik fail menggunakan fungsi os.Open(), tetapi ia gagal kerana keperluan API khusus Telegram.

Penyelesaian:

Untuk menyelesaikan isu ini, kami akan mencipta fungsi sendPostRequest tersuai yang menggunakan berbilang bahagian/bentuk- permintaan data untuk mengendalikan muat naik fail. Kaedah ini disokong secara meluas oleh pelayan web dan API. Berikut ialah kod yang dikemas kini:

<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>
Salin selepas log masuk

Memahami Penyelesaian:

Fungsi sendPostRequest menerima URL dan bilangan pembolehubah struct kandungan, setiap satu mewakili fail yang akan dimuat naik. Ia membina permintaan HTTP berbilang bahagian, di mana setiap fail disertakan dengan metadatanya (nama, jenis dan data). Format ini memastikan keserasian dengan API Telegram.

Penggunaan:

Anda boleh memanggil fungsi sendPostRequest dengan maklumat fail anda dan menerima respons pelayan dalam pembolehubah cnt. Contohnya:

<code class="go">resp, err := sendPostRequest("https://your-url.com", content{fname: "photo.jpg", ftype: "image/jpeg", fdata: []byte{your_file_data}})
if err != nil {
    // Handle error
}</code>
Salin selepas log masuk

Kesimpulan:

Fungsi sendPostRequest tersuai ini menyelesaikan isu memuat naik fail melalui permintaan POST di Golang, khususnya menangani keperluan muat naik fail Telegram. Dengan menggunakan data berbilang bahagian/borang, ia memastikan keserasian dan memudahkan untuk memuat naik fail ke pelayan jauh.

Atas ialah kandungan terperinci Bagaimana untuk Memuat naik Fail ke Telegram dengan Permintaan POST di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!