2017-11-22 10 views
1

イムは、唯一の問題はあります。javascriptのcreateObjectURL壊れたファイルオブジェクトのURLを作成するには、次のJavaScriptを使用して

var audioFile = null; 
var xhttp = new XMLHttpRequest(); 
    xhttp.onreadystatechange = function() { 
     if (this.readyState == 4 && this.status == 200) { 
       audioFile = new Blob([xhttp.response], {type: 'audio/mp3'}); 
      } 
     }; 
     xhttp.open("GET", "myMp3File.mp3", false); 
     xhttp.send(); 

var file = new File([audioFile], "myMp3File.mp3", {type: "audio/mp3", lastModified: Date.now()}); 

なぜこれが破損したmp3でblob urlを作成するかについての考えはありますか?

答えて

2

ここに複数の問題があります。
まず、非同期コードを扱っています。 XHR要求の応答を使用するには、コールバックを使用する必要があります。

次に、あなたがそのようにした場合でも、それはまだ動作しないことを良いチャンスがあります。 これは、取得する応答がプレーンテキストのUTF16であり、エンコードによっていくつかのバイトがマングルされるためです。あなたのケースで

真の解決策は、直接BLOBとして応答を要求することです。
XMLHttpRequest.responseTypeパラメータを使用するとそうすることができます。

var xhttp = new XMLHttpRequest(); 
xhttp.responseType = 'blob'; 
xhttp.onload = function(e) { 
    var blob = xhttp.response; 
    callback(blob); 
}; 
xhttp.open... 

あなたのコールバックでは、このBLOBから直接BLOBURIを作成することができます。

function callback(blob) { 
    var url = URL.createObjectURL(blob); 
    ... 

あなたが望むすべては、このファイルを表示する場合にも、そこからファイルを作成するにはポイントが存在しない、唯一のWeb APIそれだけでBLOBのファイルとしなかった場合、それが違いを生むだろうFormdata.appendメソッドがあり、そこにさえ、それほど役に立ちません。

+0

これは感謝しました:) – scriptss

関連する問題