2012-12-17 18 views
5

Play Framework 2.0, Javascript ve WebSockets kullanıyorum. Örnekte olduğu gibi tüm websockets hakkında bilgi sahibi bir AKKA aktörüm var. Tek WebSockets.In istemci tarafında gelen istekleri işleyen bir ListenerCallback nesnesi var. İstemci tarafında, JSON'da seri hale getirilmiş formüler verileri web bağlantısına göndermek için Javascript/jquery'im var. Bu basit girişler için oldukça iyi çalışır. Ama şimdi aynı dosyayı bir dosya ile yapmak istiyorum. Bu yüzden dosya verilerini bir şekilde JSON verilerine (örneğin, base64) dönüştürmeliyim. Bunu nasıl yapacaklarını bilen var mı? Dosyayı Javascript içinde "toplamak" ve ardından JSON üzerinden websocket'e göndermek istiyorum. Baz64'ün çok etkili olmadığını biliyorum, eğer birinin bir alternatifi varsa, lütfen bana söyleyin.WebLock'lar aracılığıyla dosya yükleme yoluyla Play Framework 2.0'a geçin

Teşekkür

cevap

4

Ancak, yalnızca yeni tarayıcılarda desteklenen WebSocket ve FileReader API'sini kullanmanız gerekir. Javascript şimdi baytları aktarmak için kullanılabilecek bir TypedArray veri türüne sahiptir.

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

Sen dosya girişi alanına change olayı gözlemlemek gerekir: Örneğin, aşağıdaki HTML verilen. JavaScript tarafında (jQuery) Açık:

$("#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 minimal çerçeveli (yalnızca iki bayt başlık) ve size send(), tarayıcı ikili transfer için uygun bir işlem kodu ayarı özen ve sunucu üzerinde olmalıdır Ham bayt akışını okuyabiliyor olmalısınız. En az çalışan bir örnek vermek için şimdi Play API'ye bakıyorum.

0

Ben WebSockets üzerinden dosya yükleme hakkında bilmiyorum, ama düz eski HTTP üzerinden bu FormData ve XMLHttpRequest nesneleri kullanarak mümkündür. Bu article bir göz atın.

İlgili konular