2017-10-04 4 views
0

Ich habe zwei iPhones, die JPG-Dateien zu Node.js Server über WebSockets mit Hilfe von socket.io wie dieseFilereader Puffer unterscheidet sich von verschiedenen Safari

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

Problem laden, wenn alle modernen Browser-Upload wie folgt aussieht auf node.js Seite

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 } } 

Datei-Körper ist ein Puffer, auf alten iPhone 4, mit Safari-Version 8 ich bin immer

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

hier Körper-Typ keinen Puffer ist, habe ich Buffer.alloc versucht() und Buffer.from() aber kein Glück (logisch), bei von ich bin immer

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

und bei alloc ist es

TypeError: Data must be a string or a buffer 

ps Auf Client-Seite auf alte und neue Version von Safari reader.result ist typeof Arraybuffer aber alte Safari hat Scheibe Methode darin

enter image description here

pps Aber ArrayBuffers Körper unterschiedlich sind (alte Safari auf die rechte Seite)

enter image description here

Antwort

0

Grund war einfach, alte Safari Dateikörper über WebSockets nicht senden, so Server Seite erhalten Sie nur Ereignis über Datei gesendet wird, aber ohne Datei tatsächlich.

Verwandte Themen