2012-12-17 66 views
5

我正在使用Play Framework 2.0,Javascript和WebSockets。 正如在這個例子中,我有一個AKKA演員,他知道所有的websocket。單個WebSockets.In有一個ListenerCallback對象,用於處理來自客戶端的傳入請求。 在客戶端,我有Javascript/jquery發送JSON序列化到WebSocket的公差數據。這對於簡單的輸入非常有效。但現在我想對文件做同樣的事情。所以我必須將文件數據以某種方式轉換爲JSON數據(例如base64)。有誰知道如何正確地做到這一點?我想在Javascript中「收集」文件,然後通過JSON將它發送到websocket。我知道base64效率不高,如果有人有其他選擇,請告訴我。通過Websockets上傳到Play Framework 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以提供一個最簡單的工作示例。

0

我不知道通過WebSockets的文件上傳,而是通過普通的舊式HTTP使用它和FormData對象XMLHttpRequest是可能的。看看這個article