2017-10-04 48 views
0

緩存不同,我有兩個iPhone手機誰然後通過WebSockets上傳JPG文件的Node.js服務器socket.io的幫助,這樣的FileReader從不同的Safari

var reader = new FileReader(); 
reader.onload = function() { 
    socket.emit(
     'chat_file', 
     { 
      body: reader.result 
     } 
    ); 
}; 
reader.readAsArrayBuffer(uploadedFile); 

問題是,如果所有現代瀏覽器上傳看起來是這樣的Node.js的側

Oct 04 11:01:01 test-chat1.bnk.ef.lan node[30130]: { name: 'image2.jpg', 
Oct 04 11:01:01 test-chat1.bnk.ef.lan node[30130]: body: <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 01 00 f0 00 f0 00 00 ff db 00 43 00 03 02 02 03 02 02 03 03 03 03 04 03 03 04 05 08 05 05 04 04 05 0a 07 07 06 ... >, 
Oct 04 11:01:01 test-chat1.bnk.ef.lan node[30130]: size: 95712 } } 

文件的身體是一個緩衝,舊的iPhone 4,Safari瀏覽器版本8我得到

Oct 04 11:00:25 test-chat1.bnk.ef.lan node[30088]: { room: '1','image.jpg', body: { byteLength: 889942 }, size: 889942 } } 

這裏的身型是不是一個緩衝區,我從試圖Buffer.alloc()Buffer.from(),但沒有運氣(邏輯),在情況下,我得到

TypeError: First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object. 

ALLOC的情況下它是

TypeError: Data must be a string or a buffer 

PS在對新老版本的Safari瀏覽器的客戶端reader.result是typeof運算ArrayBuffer但老野生動物園有切片的方法時,

enter image description here

PPS但ArrayBuffers體是不同的(舊的Safari右側)

enter image description here

回答

0

理由很簡單,老Safari不超過WebSockets的發送文件的身體,讓服務器你只會得到關於正在發送的文件的事件,而實際上卻沒有文件。