WebSocket을 사용하여 Golang에 파일을 업로드하려면 "github.com/gorilla/websocket" 패키지를 도입하고 WebSocket 라우팅 및 처리 기능을 설정해야 합니다. Gorrila WebSocket 라이브러리를 사용하여 HTTP 연결을 WebSocket 연결로 업그레이드하고 파일 업로드를 처리하기 위한 메시지를 수신합니다. 클라이언트는 WebSocket을 통해 파일을 보내고, 서버는 파일을 받은 후 로컬에 저장합니다. 샘플 코드는 클라이언트 연결 스크립트 및 서버 처리 로직을 포함하여 파일 업로드의 전체 프로세스를 구현하는 방법을 보여줍니다.
WebSocket을 사용하여 Golang에서 파일 업로드를 구현하는 방법
WebSocket은 클라이언트와 서버 간의 실시간 양방향 통신을 가능하게 하는 전이중 통신 프로토콜입니다. 채팅, 실시간 데이터 스트리밍, 협업 도구 등 다양한 브라우저 기반 애플리케이션을 구현하는 데 널리 사용됩니다.
Golang에서는 [github.com/gorilla/websocket
](https://godoc.org/github.com/gorilla/websocket) 패키지를 사용하여 WebSocket을 쉽게 구현할 수 있습니다. 다음은 Gorrila WebSocket을 사용하여 파일 업로드를 구현하는 방법을 보여주는 단계별 가이드입니다.
1. 필요한 패키지 소개
import ( "fmt" "io" "log" "net/http" "time" "github.com/gorilla/websocket" )
2. 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. 클라이언트에 WebSocket 연결 스크립트 제공
// 客户端 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);
실제 사례
다음은 위 코드를 사용하여 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) } }
위 내용은 WebSocket을 사용하여 Golang에 파일을 업로드하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!