通过Websockets将文件上传到Play Framework 2.0

时间:2012-12-17 12:45:11

标签: javascript jquery playframework-2.0

我正在使用Play Framework 2.0,Javascript和WebSockets。 在示例中,我有一个AKKA演员,他知道所有的websockets。单个WebSockets.In有一个ListenerCallback对象,用于处理来自客户端的传入请求。 在客户端,我有Javascript / jquery将以JSON序列化的公式数据发送到websocket。这对于简单输入非常有效。但现在我想对文件做同样的事情。所以我必须以某种方式将文件数据转换为JSON数据(例如base64)。有人知道如何正确地做到这一点吗?我想在Javascript中“收集”该文件,然后通过JSON将其发送到websocket。我知道base64效率不高,如果有人有其他选择,请告诉我。

由于

2 个答案:

答案 0 :(得分:4)

但是,您必须使用WebSocketFileReader 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)

我不知道通过WebSockets上传文件,但是通过普通的旧HTTP,可以使用FormDataXMLHttpRequest对象。看一下这个article