我正在使用Play Framework 2.0,Javascript和WebSockets.
在示例中,我有一个AKKA演员,他知道所有的websockets.单个WebSockets.In有一个ListenerCallback对象,用于处理来自客户端的传入请求.
在客户端,我有Javascript / jquery将以JSON序列化的公式数据发送到websocket.这对于简单输入非常有效.但现在我想对文件做同样的事情.所以我必须以某种方式将文件数据转换为JSON数据(例如base64).有人知道如何正确地做到这一点吗?我想在Javascript中“收集”该文件,然后通过JSON将其发送到websocket.我知道base64效率不高,如果有人有其他选择,请告诉我.
谢谢
最佳答案
但是,您可以使用WebSocket和
FileReader
API,这些API仅在较新的浏览器上受支持. Javascript现在有一个TypedArray数据类型,可用于传输字节.例如,给定以下HTML:
您需要在文件输入字段中观察更改事件.在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是最小框架(只有两个字节的头),当你发送()时,浏览器应该注意为二进制传输设置正确的操作码,并且在服务器上你应该能够读取原始字节流.我现在正在看Play API,以提供一个最小的工作示例.