5

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

谢谢

4

2 回答 2

4

这是可能的,但是您必须使用WebSocketFileReaderAPI,它们仅在较新的浏览器上受支持。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 以提供一个最小的工作示例。

于 2012-12-17T15:18:56.080 回答
0

我不知道通过 WebSockets 上传文件,但通过普通的旧 HTTP 可以使用FormDataXMLHttpRequest对象。看看这篇文章

于 2012-12-17T14:06:29.507 回答