我已成功将一个帧的form
中的文件数据发送到websocket
。我可以在多个帧中分割文件数据并发送到websocket
,但我不知道如何在一个数据数组中接收和合并帧。
我会这样做以获得将文件发送到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 :(得分:0)
通常不需要将数据拆分成多个帧然后合并它们。
如果您想获得进步,可以使用相对较小的缓冲区大小调用func (ws *Conn) Read(msg []byte) (n int, err error)
。因此,您不能一次性阅读整个消息。但您可能必须始终在文件内容之前发送文件大小。 (例如,前8个字节始终是文件大小,文件内容从第9个开始。)因此,您可以使用sumOfReceivedSize / fileSize
显示每次调用Read
后的进度。
如果您想分割文件数据,无论如何:
只需在第一条消息中发送文件大小(作为前8个字节),然后在单独的消息中发送所有其余的块。
将收到多条消息,直到收件人获得足够的数据,即达到文件大小。