Using context timeout for file upload in Go can prevent the server from waiting for a long time for the client to complete the upload. Methods include: 1) Create a new context object and set the timeout value; 2) Pass the context object to the file operation; 3) Use ctx.Err() to check whether the operation was canceled due to timeout. Practical examples: 1) Set upload timeout; 2) Parse the form; 3) Process the file; 4) Check whether the operation was canceled due to timeout. This example ensures that the upload completes within 10 seconds or returns a timeout error.
Using context timeout when uploading files in Go
Using context package to set timeout in Go is crucial for handling file upload scenarios important. It allows us to limit the time of the upload operation and prevent the server from waiting for a long time for the client to complete the upload.
Usage method
You can use the following steps to use context timeout in file upload:
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel()
http.Request
: // 根据 ctx 处理上传的文件 if err := handler.HandleUpload(req.Context(), req); err != nil { // 根据错误做出响应 }
ctx.Err()
Check whether the operation was canceled due to timeout: // 检查是否因超时而取消 if ctx.Err() == context.DeadlineExceeded { // 根据超时做出响应 }
Actual case
The following is one Practical example of file upload using context timeout:
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) }
In this example, we set the file upload timeout to 10 seconds. If the upload is not completed within this time, a timeout error will be returned.
The above is the detailed content of How to use context timeout in Golang file upload?. For more information, please follow other related articles on the PHP Chinese website!