Home > Article > Backend Development > How to use WebSockets to upload files in Golang?
To use WebSockets to upload files in Golang, you need to introduce the "github.com/gorilla/websocket" package and set up WebSocket routing and processing functions. Use the Gorrila WebSocket library to upgrade HTTP connections to WebSocket connections and listen for messages to handle file uploads. The client sends the file via WebSocket, and the server saves the file locally after receiving it. The sample code shows how to implement the complete process of file upload, including client connection script and server processing logic.
How to use WebSockets to implement file upload in Golang
WebSocket is a full-duplex communication protocol that can implement client Real-time two-way communication with the server. It is widely used to implement various browser-based applications such as chat, real-time data streaming, and collaboration tools.
In Golang, we can use the [github.com/gorilla/websocket
](https://godoc.org/github.com/gorilla/websocket) package to easily implement WebSockets . Here is a step-by-step guide demonstrating how to use Gorrila WebSocket to implement file upload:
1. Introduce the necessary packages
import ( "fmt" "io" "log" "net/http" "time" "github.com/gorilla/websocket" )
2. Set up WebSocket routing
// 设置 WebSocket 路由 http.HandleFunc("/upload", handleUpload) // 监听服务器,端口默认为 :8080 if err := http.ListenAndServe(":8080", nil); err != nil { log.Fatal(err) }
3. Handle WebSocket connections
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. Provide WebSocket connection scripts to clients
// 客户端 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);
Practical Case
The following is a complete example of using the above code to implement file upload 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) } }
The above is the detailed content of How to use WebSockets to upload files in Golang?. For more information, please follow other related articles on the PHP Chinese website!