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. WebSocket 接続を処理します。 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
}
// 处理文件上传
// ...
}
}
// 客户端 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 中国語 Web サイトの他の関連記事を参照してください。