2017-02-01 34 views
1

我成功將幀的form中的文件數據發送到websocket。我可以拆分多個幀中的文件數據併發送到websocket,但我不知道如何接收和合並一個數據數組中的幀。如何在多幀中接收二進制數據lang

我會爲獲得發送文件的WebSocket的進度做到這一點:

import (
    "golang.org/x/net/websocket" 
    "io/ioutil" 
    ... 
    ... 
) 
... 
... 
var data []byte 
err = websocket.Message.Receive(ws, &data) 
if (err == nil) { 
    ioutil.WriteFile("/home/img.jpg", data, 0644) 
} 

回答

0

通常它應該是不必要的分割數據分成多個幀,然後將它們合併。

如果你想取得進展,也許func (ws *Conn) Read(msg []byte) (n int, err error)可以調用一個相對較小的緩衝區大小。所以你不會一口氣讀完整個消息。但是,您可能必須始終在文件內容之前發送文件大小。 (例如前8個字節總是文件大小,文件內容從9開始)。因此,您可以使用sumOfReceivedSize/fileSize來顯示每次調用Read後的進度。


如果你想不管拆分文件數據的內容:

的第一條消息中簡單地發送文件的大小(如前8個字節),然後把所有剩下的塊中分離的消息。

將收到多個消息,直到收件人獲得足夠的數據,即達到文件大小。

+0

如果我們在醫學診斷中使用10 + GB大小的圖像,可能會很有必要 – Altenrion

+0

我可以發送大消息(文件數據字節),但是如何在不分幀的情況下獲得發送文件的進度(百分比) ? – Saeed

+0

要小心,主持人喜歡在聊天室中移動長時間的對話。更好的實踐 - 編輯主要問題的細節。 – Altenrion

相關問題