@domenick
Чтобы отправить файл через WebSocket с использованием Go, вам понадобится использовать пакет gorilla/websocket
.
Вот простой пример:
1
|
go get github.com/gorilla/websocket |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
package main import ( "log" "net/http" "os" "github.com/gorilla/websocket" ) func main() { http.HandleFunc("/file-upload", fileUploadHandler) log.Println("Server started on http://localhost:8000") log.Fatal(http.ListenAndServe(":8000", nil)) } func fileUploadHandler(responseWriter http.ResponseWriter, request *http.Request) { // Проверка, что запрос является WebSockets if request.Header.Get("Upgrade") != "websocket" { http.Error(responseWriter, "Websocket Upgrade Required", http.StatusBadRequest) return } upgrader := websocket.Upgrader{} conn, err := upgrader.Upgrade(responseWriter, request, nil) if err != nil { http.Error(responseWriter, err.Error(), http.StatusInternalServerError) return } defer conn.Close() // Открытие файла file, err := os.Open("file.txt") if err != nil { http.Error(responseWriter, err.Error(), http.StatusInternalServerError) return } defer file.Close() // Отправка содержимого файла через WebSocket buffer := make([]byte, 1024) for { // Чтение частями размером 1024 байт bytesRead, err := file.Read(buffer) if err != nil { break } // Отправка данных клиенту if err := conn.WriteMessage(websocket.TextMessage, buffer[:bytesRead]); err != nil { http.Error(responseWriter, err.Error(), http.StatusInternalServerError) return } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
var socket = new WebSocket("ws://localhost:8000/file-upload"); socket.onmessage = function(event) { // Обработка полученных данных var data = event.data; console.log("Received:", data); }; socket.onclose = function(event) { // Обработка закрытия соединения console.log("Connection closed:", event); }; |