ホームページ > バックエンド開発 > Golang > Golang を使用して Telegram ボットにファイルを送信するときに発生する「不正なリクエスト: リクエストに写真がありません」エラーを修正する方法

Golang を使用して Telegram ボットにファイルを送信するときに発生する「不正なリクエスト: リクエストに写真がありません」エラーを修正する方法

DDD
リリース: 2024-11-02 16:01:02
オリジナル
792 人が閲覧しました

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

Telegram ボット開発用の Golang で POST リクエストを使用してファイルを送信する

問題: ファイルのアップロード中にエラー「不正なリクエスト: リクエストに写真がありません」が発生する

POST リクエストを介して Telegram にファイルをアップロードする関数を作成しようとしましたが、「Bad Request: there is no photo in the request.」というエラーが発生しました。 SendPostRequest 関数を使用した最初のアプローチは失敗に終わりました。

改善されたソリューション

徹底的な調査の結果、次の改善されたソリューションが見つかりました:

<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>
ログイン後にコピー

この更新されたソリューションはマルチパート フォームを利用しています。ファイルを送信するためのデータ。これにより問題が解決され、ファイルがリクエスト内に存在することが保証されます。

以上がGolang を使用して Telegram ボットにファイルを送信するときに発生する「不正なリクエスト: リクエストに写真がありません」エラーを修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート