Maison > Article > développement back-end > Comment utiliser WebSockets pour télécharger des fichiers dans Golang ?
Pour utiliser WebSockets pour télécharger des fichiers dans Golang, vous devez introduire le package "github.com/gorilla/websocket" et configurer les fonctions de routage et de traitement WebSocket. Utilisez la bibliothèque Gorrila WebSocket pour mettre à niveau les connexions HTTP vers des connexions WebSocket et écouter les messages pour gérer les téléchargements de fichiers. Le client envoie le fichier via WebSocket et le serveur enregistre le fichier localement après l'avoir reçu. L'exemple de code montre comment implémenter le processus complet de téléchargement de fichiers, y compris le script de connexion client et la logique de traitement du serveur.
Comment utiliser WebSockets pour implémenter le téléchargement de fichiers dans Golang
WebSocket est un protocole de communication full-duplex qui permet une communication bidirectionnelle en temps réel entre le client et le serveur. Il est largement utilisé pour implémenter diverses applications basées sur un navigateur telles que le chat, le streaming de données en temps réel et les outils de collaboration.
Dans Golang, nous pouvons utiliser le package [github.com/gorilla/websocket
](https://godoc.org/github.com/gorilla/websocket) pour implémenter facilement WebSockets. Voici un guide étape par étape montrant comment utiliser Gorrila WebSocket pour implémenter les téléchargements de fichiers :
1 Introduire les packages nécessaires
import ( "fmt" "io" "log" "net/http" "time" "github.com/gorilla/websocket" )
2 Configurer le routage WebSocket
// 设置 WebSocket 路由 http.HandleFunc("/upload", handleUpload) // 监听服务器,端口默认为 :8080 if err := http.ListenAndServe(":8080", nil); err != nil { log.Fatal(err) }
3.
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. Fournir un script de connexion WebSocket pour le client
// 客户端 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);
Cas pratique
Ce qui suit est un exemple complet d'utilisation du code ci-dessus pour implémenter le téléchargement de fichiers dans 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) } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!