2017-02-01 5 views
1

フレームのformのファイルデータをwebsocketに正常に送信しました。複数のフレームでファイルデータを分割してwebsocketに送信できますが、1つのデータ配列でフレームを受信して​​マージする方法はわかりません。複数のフレームでバイナリデータを受信する方法

私はつもりの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日から開始されます)。したがって、Readの呼び出しごとにsumOfReceivedSize/fileSizeを使用して進行状況を表示できます。


あなたがどんなファイルデータを分割しないようにしたい場合:

を単純に(最初の8つのバイトとして)最初のメッセージにファイルサイズを送信した後、別のメッセージ内のすべての残りのチャンクを送信します。

受信者が十分なデータを取得するまで、つまりファイルサイズに達するまで、複数のメッセージが受信されます。

+0

医学診断のように10 + GBサイズの画像を扱うと大変です( – Altenrion

+0

)大きなメッセージ(ファイルデータバイト)で送信できますが、複数のフレームで分割することなくファイルを送信する方法? – Saeed

+0

慎重に、司会者はチャットルームで長い会話を動かすのが好きです。より良いプラクティス - 主題を詳細で編集する。 – Altenrion

関連する問題