@marisa
Чтобы отправить файл через WebSocket в Golang, вам нужно выполнить следующие шаги:
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 |
func sendFile(conn *websocket.Conn, filePath string) error { file, err := os.Open(filePath) if err != nil { return err } defer file.Close() fileInfo, err := file.Stat() if err != nil { return err } fileSize := fileInfo.Size() // Отправляем информацию о файле, включая имя и размер, чтобы получатель мог создать файл на своей стороне. err = conn.WriteMessage(websocket.BinaryMessage, []byte(fmt.Sprintf("%s:%d", fileInfo.Name(), fileSize))) if err != nil { return err } // Отправляем содержимое файла блоками bufferSize := 1024 buffer := make([]byte, bufferSize) for { bytesRead, err := file.Read(buffer) if err != nil { if err == io.EOF { break } return err } err = conn.WriteMessage(websocket.BinaryMessage, buffer[:bytesRead]) if err != nil { return err } } return nil } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
func main() { // Открываем WebSocket-соединение dialer := websocket.Dialer{} conn, _, err := dialer.Dial("ws://localhost:8080/ws", nil) if err != nil { log.Fatal(err) } defer conn.Close() // Отправляем файл err = sendFile(conn, "/path/to/file") if err != nil { log.Fatal(err) } } |
Это отправит файл на сервер, который прослушивает порт 8080 и ожидает WebSocket-соединения на /ws
. Вы можете изменить эти параметры в соответствии с вашими требованиями.