Heim >Backend-Entwicklung >Golang >Wie verwende ich WebSockets zum Hochladen von Dateien in Golang?
Um WebSockets zum Hochladen von Dateien in Golang zu verwenden, müssen Sie das Paket „github.com/gorilla/websocket“ einführen und WebSocket-Routing- und Verarbeitungsfunktionen einrichten. Verwenden Sie die Gorrila WebSocket-Bibliothek, um HTTP-Verbindungen auf WebSocket-Verbindungen zu aktualisieren und auf Nachrichten zu warten, um Datei-Uploads zu verarbeiten. Der Client sendet die Datei über WebSocket und der Server speichert die Datei nach dem Empfang lokal. Der Beispielcode zeigt, wie der gesamte Prozess des Datei-Uploads implementiert wird, einschließlich Client-Verbindungsskript und Serververarbeitungslogik.
So verwenden Sie WebSockets zum Implementieren des Datei-Uploads in Golang
WebSocket ist ein Vollduplex-Kommunikationsprotokoll, das eine bidirektionale Echtzeitkommunikation zwischen dem Client und dem Server ermöglicht. Es wird häufig zur Implementierung verschiedener browserbasierter Anwendungen wie Chat, Echtzeit-Datenstreaming und Tools für die Zusammenarbeit verwendet.
In Golang können wir das Paket [github.com/gorilla/websocket
](https://godoc.org/github.com/gorilla/websocket) verwenden, um WebSockets einfach zu implementieren. Hier ist eine Schritt-für-Schritt-Anleitung, die zeigt, wie Sie Gorrila WebSocket zum Implementieren von Datei-Uploads verwenden:
import ( "fmt" "io" "log" "net/http" "time" "github.com/gorilla/websocket" )2. WebSocket-Routing einrichten
// 设置 WebSocket 路由 http.HandleFunc("/upload", handleUpload) // 监听服务器,端口默认为 :8080 if err := http.ListenAndServe(":8080", nil); err != nil { log.Fatal(err) }
func handleUpload(w http.ResponseWriter, r *http.Request) { ws, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Fatal(err) } defer ws.Close() for { _, _, err := ws.ReadMessage() if err != nil { if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) { log.Printf("unexpected close error: %v", err) } break } // 处理文件上传 // ... } }
4. Stellen Sie ein WebSocket-Verbindungsskript für den Client bereit
// 客户端 WebSocket 连接脚本 var ws = new WebSocket("ws://localhost:8080/upload"); // 监听消息接收事件 ws.onmessage = function (event) { console.log(event.data); }; // 发送文件 var file = document.querySelector('input[type=file]').files[0]; ws.send(file);
Praktischer Fall
Das Folgende ist ein vollständiges Beispiel für die Verwendung des obigen Codes zum Implementieren des Datei-Uploads in Golang:package main
import (
"fmt"
"io"
"log"
"net/http"
"os"
"time"
"github.com/gorilla/websocket"
)
var upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
}
func handleUpload(w http.ResponseWriter, r *http.Request) {
ws, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Fatal(err)
}
defer ws.Close()
for {
_, _, err := ws.ReadMessage()
if err != nil {
if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) {
log.Printf("unexpected close error: %v", err)
}
break
}
// 处理文件上传
f, err := os.Create("test.txt")
if err != nil {
log.Fatal(err)
}
defer f.Close()
if _, err := io.Copy(f, ws); err != nil {
log.Fatal(err)
}
fmt.Println("文件上传成功")
if err := ws.WriteMessage(websocket.TextMessage, []byte("文件上传成功")); err != nil {
log.Fatal(err)
}
}
}
func main() {
// 设置 WebSocket 路由
http.HandleFunc("/upload", handleUpload)
// 监听服务器,端口默认为 :8080
if err := http.ListenAndServe(":8080", nil); err != nil {
log.Fatal(err)
}
}
Das obige ist der detaillierte Inhalt vonWie verwende ich WebSockets zum Hochladen von Dateien in Golang?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!