2016-03-30 3 views
4

ich einen Klecks auf String umwandeln kann Filereader, aber ich möchte es konvertieren zurück:Javascript konvertieren Blob String und zurück

var reader = new window.FileReader(); 
reader.readAsDataURL(blob); 
reader.onloadend = function() { 
    base64data = reader.result; 
    var blobToSend = base64data.substr(base64data.indexOf(',')+1); 
    rtcMultiConnection.send({"command":{ 
     "recording":blobToSend, 
     "type":blob.type, 
     "size":blob.size 
    }}); 
} 

Dies wird mit https://github.com/muaz-khan/RTCMultiConnection gesendet, aber die wichtigste Frage ist, wie das Blob zu rekonstruieren nach dem Senden. Leider hat das Senden des Blobs nicht funktioniert.

+1

Chrome unterstützt Array-Puffer und RTCMultiConection unterstützt es auch. Blob-Unterstützung in Chrom ist in Arbeit. Jetzt können Sie "fileReader.readAsArrayBuffer" verwenden. Zu Ihrer Information wird dies funktionieren: 'connection.send (recorder.blob)' RTCMultiConnection teilt automatisch den gesamten Blob (beliebiger Größe). Remotebenutzer erhalten das vollständige Blob im Ereignis "onFileEnd". –

Antwort

2

Quelle: Creating a Blob from a base64 string in JavaScript Diese Methode konvertiert die back base64-Daten korrekt in die ursprünglichen Binärdaten. Aus Gründen der Leistungsverbesserung werden die Daten in Blöcken der Größe sliceSize verarbeitet. HINWEIS: Quelle ist in TypScript

public static Base64ToBlob(b64Data, contentType = "", sliceSize = 512): Blob 
    { 
     const byteCharacters = atob(b64Data); 
     const byteArrays = []; 

     for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) 
     { 
      const slice = byteCharacters.slice(offset, offset + sliceSize); 
      const byteNumbers = new Array(slice.length); 

      for (let i = 0; i < slice.length; i++) 
      { 
       byteNumbers[i] = slice.charCodeAt(i); 
      } 

      const byteArray = new Uint8Array(byteNumbers); 
      byteArrays.push(byteArray); 
     } 

     const blob = new Blob(byteArrays, { type: contentType }); 
     return blob; 
    }