我正在使用Play Framework 2.0,Javascript和WebSockets。 在示例中,我有一个AKKA演员,他知道所有的websockets。单个WebSockets.In有一个ListenerCallback对象,用于处理来自客户端的传入请求。 在客户端,我有Javascript / jquery将以JSON序列化的公式数据发送到websocket。这对于简单输入非常有效。但现在我想对文件做同样的事情。所以我必须以某种方式将文件数据转换为JSON数据(例如base64)。有人知道如何正确地做到这一点吗?我想在Javascript中“收集”该文件,然后通过JSON将其发送到websocket。我知道base64效率不高,如果有人有其他选择,请告诉我。
由于
答案 0 :(得分:4)
但是,您必须使用WebSocket
和FileReader
API,这些API仅在较新的浏览器上受支持。 Javascript现在有一个TypedArray
数据类型,可用于传输字节。例如,给定以下HTML:
<form>
<input type="file" id="picture" />
</form>
您需要观察文件输入字段中的change
事件。在Javascript方面(jQuery):
$("#picture").change(function(){
var reader = new FileReader;
reader.onloadend = function (bytes) {
var ws = new WebSocket("ws://host/path");
ws.send(bytes);
}
reader.readAsArrayBuffer(this.files[0]);
});
WebSocket PDU最小框架(只有两个字节的标头),当你send()
时,浏览器应该注意为二进制传输设置正确的操作码,在服务器上你应该能够读取流原始字节。我现在正在查看Play API以提供最小的工作示例。
答案 1 :(得分:0)