Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Membetulkan \'Permintaan Buruk: tiada foto dalam permintaan\' Ralat Semasa Memuat Naik Fail dengan Permintaan POST Go?

Bagaimana untuk Membetulkan \'Permintaan Buruk: tiada foto dalam permintaan\' Ralat Semasa Memuat Naik Fail dengan Permintaan POST Go?

DDD
Lepaskan: 2024-11-03 04:13:30
asal
268 orang telah melayarinya

How to Fix

Memuat Naik Fail dengan Permintaan POST dalam Go

Dalam Go, anda boleh menggunakan permintaan HTTP POST untuk memuat naik fail ke pelayan jauh. Apabila menggunakan API bot Telegram, anda mungkin menghadapi mesej ralat yang menyatakan "Permintaan Buruk: tiada foto dalam permintaan." Ini menunjukkan bahawa data fail tidak disertakan dalam permintaan dengan betul.

Untuk menyelesaikan isu ini, anda perlu memformat permintaan POST sebagai permintaan data berbilang bahagian/borang. Ini membolehkan anda memasukkan kedua-dua parameter teks dan data fail binari dalam permintaan yang sama. Berikut ialah versi kod anda yang dikemas kini yang merangkumi pengubahsuaian yang diperlukan:

<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

Kod dikemas kini ini:

  • Mencipta berbilang bahagian.Penulis untuk membina permintaan data berbilang bahagian/bentuk.
  • Menambahkan setiap fail pada permintaan menggunakan CreateFormFile.
  • Menutup penulis berbilang bahagian untuk melengkapkan pembinaan permintaan.
  • Menetapkan pengepala jenis kandungan kepada berbilang bahagian/data-bentuk.
  • Menghantar permintaan dan mendapatkan semula respons daripada Telegram.

Atas ialah kandungan terperinci Bagaimana untuk Membetulkan \'Permintaan Buruk: tiada foto dalam permintaan\' Ralat Semasa Memuat Naik Fail dengan Permintaan POST Go?. 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