2016-03-30 7 views
4

は私がFileReaderのを使用して文字列にブロブを変換することができますが、私はそれをバックに変換したい:Javascriptが文字列にBLOBを変換し、バック

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に送られるが、主な問題は、ブロブを再構築する方法です送られた後。残念ながら、ブロブをそのまま送ることはできませんでした。

+1

クロムは配列バッファをサポートしており、RTCMultiConectionもサポートしています。クロムのブロブサポートは作業中です。今のところ、 "fileReader.readAsArrayBuffer"を使用することができます。あなたの情報については、これは動作します: 'connection.send(recorder.blob)' RTCMultiConnectionは(任意のサイズの)BLOB全体を自動的に共有します。リモートユーザーは、 "onFileEnd"イベントで完全なBLOBを受け取ります。 –

答えて

2

ソース:Creating a Blob from a base64 string in JavaScript このメソッドは、元のバイナリデータに正しくbase64データを変換します。 パフォーマンスを向上させるために、データはsliceSizeのサイズのブロック単位で処理されます。 注:ソースはタイプスクリプト

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; 
    } 
関連する問題