2017-02-01 33 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

相关问题