2012-12-17 10 views
5

Utilizzo Play Framework 2.0, Javascript e WebSockets. Come nell'esempio, ho un attore AKKA che ha conoscenza di tutte le websocket. Il singolo WebSockets.In ha un oggetto ListenerCallback che gestisce le richieste in arrivo dal lato client. Sul lato client ho Javascript/jquery per inviare dati formali serializzati in JSON alla websocket. Funziona piuttosto bene per semplici input. Ma ora voglio fare lo stesso con un file. Quindi devo convertire i dati del file in qualche modo in dati JSON (ad esempio base64). Qualcuno sa come farlo correttamente? Voglio "raccogliere" il file all'interno di Javascript e quindi inviarlo tramite JSON alla websocket. So che base64 non è molto efficiente, se qualcuno ha un'alternativa, per favore dimmelo.Caricamento file tramite Websockets per Play Framework 2.0

Grazie

risposta

4

È possibile, tuttavia, utilizzare le API WebSocket e FileReader, che sono supportate solo sui browser più recenti. Javascript ha ora un tipo di dati TypedArray, che può essere utilizzato per trasferire i byte. Ad esempio, dato il seguente codice HTML:

​<form> 
    <input type="file" id="picture" /> 
</form>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ 

è necessario osservare l'evento change sul campo di inputfile. Sul lato 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 sono minimamente incorniciato (solo due byte di intestazione), e quando si send(), il browser dovrebbe prendersi cura di impostare il codice operativo adeguato per il trasferimento binario, e sul server dovresti essere in grado di leggere il flusso di byte non elaborati. Sto guardando ora l'API Play per fornire un esempio di lavoro minimo.

0

Io non so di upload di file via WebSockets, ma tramite pianura vecchio HTTP è possibile utilizzando FormData e XMLHttpRequest oggetti. Dai un'occhiata a questo article.

Problemi correlati