首頁  >  文章  >  後端開發  >  Golang 檔案上傳中如何使用 context 逾時?

Golang 檔案上傳中如何使用 context 逾時?

WBOY
WBOY原創
2024-06-01 19:20:01737瀏覽

Go 中檔案上傳使用 context 逾時可以防止伺服器長時間等待客戶端完成上傳。方法包括:1)建立一個新的 context 對象,設定逾時值;2)將 context 對象傳遞給文件操作;3)使用 ctx.Err() 檢查是否因逾時取消操作。實際範例:1)設定上傳逾時;2)解析表單;3)處理檔案;4)檢查是否因逾時取消操作。此範例確保上傳在 10 秒內完成,否則傳回逾時錯誤。

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

Go 中檔案上傳時使用context 逾時

在Go 中使用context 套件設定逾時對於處理檔案上傳場景至關重要。它使我們能夠限制上傳操作的時間,防止伺服器長時間等待客戶端完成上傳。

使用方法

可以使用以下步驟在檔案上傳中使用context 逾時:

  1. 建立一個新的context 對象,設定一個適當的逾時值:
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
  1. 將context 物件傳遞給處理上傳的檔案操作,例如http.Request
// 根据 ctx 处理上传的文件
if err := handler.HandleUpload(req.Context(), req); err != nil {
    // 根据错误做出响应
}
  1. 使用ctx.Err() 檢查操作是否因逾時而取消:
// 检查是否因超时而取消
if ctx.Err() == context.DeadlineExceeded {
    // 根据超时做出响应
}

實戰案例

以下是一個使用context 逾時的檔案上傳實際範例:

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

在該範例中,我們將檔案上傳逾時的設定為10 秒,如果在該時間內未完成上傳,則傳回逾時錯誤。

以上是Golang 檔案上傳中如何使用 context 逾時?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn