ホームページ > バックエンド開発 > Golang > Golang ファイルのアップロードでコンテキスト タイムアウトを使用するにはどうすればよいですか?

Golang ファイルのアップロードでコンテキスト タイムアウトを使用するにはどうすればよいですか?

WBOY
リリース: 2024-06-01 19:20:01
オリジナル
772 人が閲覧しました

Go でファイルのアップロードにコンテキスト タイムアウトを使用すると、クライアントがアップロードを完了するまでサーバーが長時間待機するのを防ぐことができます。方法には次のものが含まれます: 1) 新しいコンテキスト オブジェクトを作成し、タイムアウト値を設定します。2) コンテキスト オブジェクトをファイル操作に渡します。3) ctx.Err() を使用して、タイムアウトにより操作がキャンセルされたかどうかを確認します。実際の例: 1) アップロードのタイムアウトを設定する; 2) フォームを解析する; 4) タイムアウトにより操作がキャンセルされたかどうかを確認する。この例では、アップロードが 10 秒以内に完了するか、タイムアウト エラーが返されるようにします。

Golang 文件上传中如何使用 context 超时?

Go でファイルをアップロードするときにコンテキスト タイムアウトを使用する

Go でコンテキスト パッケージを使用してタイムアウトを設定することは、ファイル アップロード シナリオを処理するために重要です。これにより、アップロード操作の時間を制限し、クライアントがアップロードを完了するまでサーバーが長時間待機するのを防ぐことができます。

使用方法

次の手順を使用して、ファイルアップロードでコンテキストタイムアウトを使用できます:

  1. 新しいコンテキストオブジェクトを作成し、適切なタイムアウト値を設定します:
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
ログイン後にコピー
  1. コンテキストオブジェクトをコンテキストオブジェクトに渡しますhttp.Request などのファイルのアップロード操作を処理します: http.Request
// 根据 ctx 处理上传的文件
if err := handler.HandleUpload(req.Context(), req); err != nil {
    // 根据错误做出响应
}
ログイン後にコピー
  1. 使用 ctx.Err()
  2. // 检查是否因超时而取消
    if ctx.Err() == context.DeadlineExceeded {
        // 根据超时做出响应
    }
    ログイン後にコピー
      ctx.Err() を使用して、操作が適切かどうかを確認します。タイムアウトによりキャンセルされました:

      package main
      
      import (
          "context"
          "net/http"
          "time"
      )
      
      // 设定文件上传超时为 10 秒
      const uploadTimeout = 10 * time.Second
      
      type handler struct{}
      
      func (h *handler) HandleUpload(ctx context.Context, r *http.Request) error {
          // 解析上传的表单
          if err := r.ParseMultipartForm(int64(5e6)); err != nil {
              return err
          }
      
          // 处理上传的文件
          // ...
      
          // 检查是否因超时而取消
          if ctx.Err() == context.DeadlineExceeded {
              return http.ErrRequestTimeout
          }
      
          return nil
      }
      
      func main() {
          http.Handle("/upload", &handler{})
      
          http.ListenAndServe(":8080", nil)
      }
      ログイン後にコピー
      実際的なケース

      以下は、コンテキスト タイムアウトを使用したファイル アップロードの実際的な例です:

      rrreee🎜 この例では、ファイル アップロードのタイムアウトを 10 秒に設定し、アップロードがこの時間内に完了しない場合は、タイムアウト エラーが返されます。 🎜

      以上がGolang ファイルのアップロードでコンテキスト タイムアウトを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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