ホームページ  >  記事  >  バックエンド開発  >  Golang で POST リクエストを使用してファイルを Telegram にアップロードする方法

Golang で POST リクエストを使用してファイルを Telegram にアップロードする方法

DDD
DDDオリジナル
2024-11-04 07:49:30181ブラウズ

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

Go で POST リクエストを使用してファイルをアップロードする

HTTP POST リクエストを介してファイルをアップロードするのは、特に 3 番目のリクエストを処理する場合、複雑なタスクになる可能性があります。 -Telegram などのパーティ API。これに対処するために、ファイルのアップロードを効率的に処理する Golang で書かれたカスタム関数を調べてみましょう。

問題:

写真が見つからないことを示す Telegram からのエラーが発生しました。

コード スニペット:

提供されたコード スニペットは、os.Open() 関数を使用してファイルをアップロードしようとします。しかし、Telegram 固有の API 要件により失敗します。

解決策:

この問題を解決するには、multipart/form- を利用するカスタム sendPostRequest 関数を作成します。ファイルのアップロードを処理するためのデータ リクエスト。このメソッドは、Web サーバーと API によって広くサポートされています。更新されたコードは次のとおりです:

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

解決策の理解:

sendPostRequest 関数は、URL と可変数のコンテンツ構造体を受け入れます。それぞれが、送信されるファイルを表します。アップロードされました。これは、各ファイルがメタデータ (名前、タイプ、データ) とともに含まれるマルチパート HTTP リクエストを構築します。この形式は、Telegram の API との互換性を保証します。

使用法:

ファイル情報を指定して sendPostRequest 関数を呼び出し、cnt 変数でサーバーの応答を受け取ることができます。例:

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

結論:

このカスタム sendPostRequest 関数は、Golang の POST リクエストによるファイルのアップロードの問題を解決し、特に Telegram のファイル アップロード要件に対処します。 multipart/form-data を使用することで互換性が確保され、リモート サーバーへのファイルのアップロードが容易になります。

以上がGolang で POST リクエストを使用してファイルを Telegram にアップロードする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。