Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Memuat naik Fail ke Telegram dengan Permintaan POST di Golang?

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

DDD
DDDasal
2024-11-04 07:49:30180semak imbas

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>

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>

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!

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