Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk menggunakan WebSockets untuk memuat naik fail di Golang?

Bagaimana untuk menggunakan WebSockets untuk memuat naik fail di Golang?

WBOY
Lepaskan: 2024-06-01 22:20:59
asal
445 orang telah melayarinya

Untuk menggunakan WebSockets untuk memuat naik fail dalam Golang, anda perlu memperkenalkan pakej "github.com/gorilla/websocket" dan menyediakan fungsi penghalaan dan pemprosesan WebSocket. Gunakan perpustakaan WebSocket Gorrila untuk menaik taraf sambungan HTTP kepada sambungan WebSocket dan mendengar mesej untuk mengendalikan muat naik fail. Pelanggan menghantar fail melalui WebSocket, dan pelayan menyimpan fail secara setempat selepas menerimanya. Kod sampel menunjukkan cara melaksanakan proses lengkap muat naik fail, termasuk skrip sambungan klien dan logik pemprosesan pelayan.

如何在 Golang 中使用 WebSockets 实现文件上传?

Cara menggunakan WebSockets untuk melaksanakan muat naik fail dalam Golang

WebSocket ialah protokol komunikasi dupleks penuh yang membolehkan komunikasi dua hala masa nyata antara pelanggan dan pelayan. Ia digunakan secara meluas untuk melaksanakan pelbagai aplikasi berasaskan pelayar seperti sembang, penstriman data masa nyata dan alatan kerjasama.

Di Golang, kami boleh menggunakan pakej [github.com/gorilla/websocket](https://godoc.org/github.com/gorilla/websocket) untuk melaksanakan WebSockets dengan mudah. Berikut ialah panduan langkah demi langkah yang menunjukkan cara menggunakan Gorrila WebSocket untuk melaksanakan muat naik fail:

1. Perkenalkan pakej yang diperlukan

import (
    "fmt"
    "io"
    "log"
    "net/http"
    "time"

    "github.com/gorilla/websocket"
)
Salin selepas log masuk

2. Sediakan penghalaan WebSocket

// 设置 WebSocket 路由
http.HandleFunc("/upload", handleUpload)

// 监听服务器,端口默认为 :8080
if err := http.ListenAndServe(":8080", nil); err != nil {
    log.Fatal(err)
}
Salin selepas log masuk

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
        }
        
        // 处理文件上传
        // ...
    }
}
Salin selepas log masuk
4. Sediakan skrip sambungan WebSocket kepada pelanggan

// 客户端 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);
Salin selepas log masuk
Kes praktikal

Berikut adalah contoh lengkap menggunakan kod di atas untuk melaksanakan muat naik fail di 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)
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk menggunakan WebSockets untuk memuat naik fail di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan