2016-03-30 2 views
4

я могу преобразовать двоичный объект в строку, используя FileReader, но я хочу, чтобы преобразовать его обратно:Javascript преобразовать двоичный объект в строку и обратно

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

Это отправляется с https://github.com/muaz-khan/RTCMultiConnection но основной вопрос заключается в том, чтобы реконструировать блоб после отправки. К сожалению, отправка blob как не работает.

+1

Хром поддерживает массив-буфер, а RTCMultiConection поддерживает его также. Поддержка blob в хроме - это незавершенное производство. Итак, теперь вы можете использовать «fileReader.readAsArrayBuffer». Для вашей информации это будет работать: 'connection.send (recorder.blob)' RTCMultiConnection будет автоматически делиться всем блобом (любого размера). Удаленные пользователи получат полный blob в событии onFileEnd. –

ответ

2

источник: Creating a Blob from a base64 string in JavaScript Этот метод корректно преобразует данные base64 в исходные двоичные данные. Для улучшения производительности данные обрабатываются в блоках размера sliceSize. ПРИМЕЧАНИЕ: источник находится в TypeScript

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; 
    } 
Смежные вопросы