Heim > Backend-Entwicklung > Golang > Wie verwende ich das Kontext-Timeout beim Hochladen von Golang-Dateien?

Wie verwende ich das Kontext-Timeout beim Hochladen von Golang-Dateien?

WBOY
Freigeben: 2024-06-01 19:20:01
Original
763 Leute haben es durchsucht

Durch die Verwendung des Kontext-Timeouts für das Hochladen von Dateien in Go kann verhindert werden, dass der Server lange darauf wartet, dass der Client den Upload abschließt. Zu den Methoden gehören: 1) Erstellen Sie ein neues Kontextobjekt und legen Sie den Timeout-Wert fest. 2) Übergeben Sie das Kontextobjekt an die Dateioperation. 3) Verwenden Sie ctx.Err(), um zu überprüfen, ob die Operation aufgrund einer Zeitüberschreitung abgebrochen wurde. Praktische Beispiele: 1) Upload-Zeitüberschreitung festlegen; 2) Das Formular analysieren; 3) Die Datei verarbeiten; 4) Überprüfen, ob der Vorgang aufgrund einer Zeitüberschreitung abgebrochen wurde. Dieses Beispiel stellt sicher, dass der Upload innerhalb von 10 Sekunden abgeschlossen wird oder ein Timeout-Fehler zurückgegeben wird.

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

Kontext-Timeout beim Hochladen von Dateien in Go verwenden

Das Festlegen von Timeouts mithilfe des Kontextpakets in Go ist für die Handhabung von Datei-Upload-Szenarien von entscheidender Bedeutung. Dadurch können wir die Zeit des Upload-Vorgangs begrenzen und verhindern, dass der Server lange darauf wartet, dass der Client den Upload abschließt.

So verwenden Sie

Sie können das Kontext-Timeout beim Hochladen von Dateien mit den folgenden Schritten verwenden:

  1. Erstellen Sie ein neues Kontextobjekt und legen Sie einen geeigneten Timeout-Wert fest:
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
Nach dem Login kopieren
  1. Übergeben Sie das Kontextobjekt an das eine das die Vorgänge zum Hochladen von Dateien abwickelt, wie z. B. http.Request: http.Request
// 根据 ctx 处理上传的文件
if err := handler.HandleUpload(req.Context(), req); err != nil {
    // 根据错误做出响应
}
Nach dem Login kopieren
  1. 使用 ctx.Err()
  2. // 检查是否因超时而取消
    if ctx.Err() == context.DeadlineExceeded {
        // 根据超时做出响应
    }
    Nach dem Login kopieren
      Verwenden Sie ctx.Err(), um zu überprüfen, ob der Vorgang ausgeführt wurde wurde aufgrund einer Zeitüberschreitung abgebrochen:

      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)
      }
      Nach dem Login kopieren
      Praktischer Fall

      Das Folgende ist ein praktisches Beispiel für das Hochladen von Dateien mithilfe einer Kontext-Zeitüberschreitung:

      rrreee🎜In diesem Beispiel stellen wir das Zeitlimit für das Hochladen von Dateien auf 10 Sekunden ein und wenn der Upload erfolgt Wird innerhalb dieser Zeit nicht abgeschlossen, wird ein Timeout-Fehler zurückgegeben. 🎜

      Das obige ist der detaillierte Inhalt vonWie verwende ich das Kontext-Timeout beim Hochladen von Golang-Dateien?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Verwandte Etiketten:
    Quelle:php.cn
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage