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 サイトの他の関連記事を参照してください。