5

Play Framework 2.0、Javascript、および WebSocket を使用しています。例のように、すべての WebSocket の知識を持つ AKKA アクターがいます。単一の WebSockets.In には、クライアント側からの着信要求を処理する ListenerCallback オブジェクトがあります。クライアント側では、JSON でシリアル化された公式データを websocket に送信する Javascript/jquery があります。これは、単純な入力では非常にうまく機能します。しかし今、私はファイルで同じことをしたいと思っています。そのため、何らかの方法でファイル データを JSON データ (base64 など) に変換する必要があります。これを適切に行う方法を知っている人はいますか?Javascript 内でファイルを「収集」し、JSON 経由で websocket に送信したいと考えています。base64 はあまり効率的ではないことは承知しています。代替手段があれば教えてください。

ありがとう

4

2 に答える 2

4

可能ですが、新しいブラウザでのみサポートされている APIを使用する必要がWebSocketあります。FileReaderJavascript には、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 は最小限にフレーム化されており (ヘッダーは 2 バイトのみ)、send()ブラウザーはバイナリ転送用の適切なオペコードを設定する必要があり、サーバーでは生のバイトのストリームを読み取ることができるはずです。私は今 Play API を調べて、最小限の実例を提供しています。

于 2012-12-17T15:18:56.080 に答える
0

WebSockets を介したファイルのアップロードについては知りませんが、プレーンな古い HTTP を介してFormDataオブジェクトXMLHttpRequestを使用することは可能です。この記事を見てください。

于 2012-12-17T14:06:29.507 に答える