Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk menggunakan WebSockets untuk memuat naik fail di Golang?
Untuk menggunakan WebSockets untuk memuat naik fail dalam Golang, anda perlu memperkenalkan pakej "github.com/gorilla/websocket" dan menyediakan fungsi penghalaan dan pemprosesan WebSocket. Gunakan perpustakaan WebSocket Gorrila untuk menaik taraf sambungan HTTP kepada sambungan WebSocket dan mendengar mesej untuk mengendalikan muat naik fail. Pelanggan menghantar fail melalui WebSocket, dan pelayan menyimpan fail secara setempat selepas menerimanya. Kod sampel menunjukkan cara melaksanakan proses lengkap muat naik fail, termasuk skrip sambungan klien dan logik pemprosesan pelayan.
Cara menggunakan WebSockets untuk melaksanakan muat naik fail dalam Golang
WebSocket ialah protokol komunikasi dupleks penuh yang membolehkan komunikasi dua hala masa nyata antara pelanggan dan pelayan. Ia digunakan secara meluas untuk melaksanakan pelbagai aplikasi berasaskan pelayar seperti sembang, penstriman data masa nyata dan alatan kerjasama.
Di Golang, kami boleh menggunakan pakej [github.com/gorilla/websocket
](https://godoc.org/github.com/gorilla/websocket) untuk melaksanakan WebSockets dengan mudah. Berikut ialah panduan langkah demi langkah yang menunjukkan cara menggunakan Gorrila WebSocket untuk melaksanakan muat naik fail:
1. Perkenalkan pakej yang diperlukan
import ( "fmt" "io" "log" "net/http" "time" "github.com/gorilla/websocket" )
2. Sediakan penghalaan WebSocket
// 设置 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. Sediakan skrip sambungan WebSocket kepada pelanggan
// 客户端 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);Kes praktikal
Berikut adalah contoh lengkap menggunakan kod di atas untuk melaksanakan muat naik fail di 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) } }
Atas ialah kandungan terperinci Bagaimana untuk menggunakan WebSockets untuk memuat naik fail di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!