web-dev-qa-db-ja.com

Javascript-型指定された配列をblobとして保存し、バイナリデータとして読み戻します

ArrayBufferから生成されているバイナリデータでいっぱいの型付き配列があります

var myArr = new Uint8Array(myBuffer);

私はこれをユーザーに提示しています

var blob = new Blob(myArr, {type: "octet/stream"};
var blobURL = URL.createObjectURL(blob);

リンクを挿入します

"<a href=" + blobUrl + " download=" + filename "/a>"

後で、ユーザーにディスクからファイルを選択させ、ファイルリーダーを使用して

var reader = new FileReader();

reader.onload = function () {
console.log(reader.result);
};

reader.readAsArrayBuffer(sourceFile);

問題は、私が何をしても、ファイルの内容の「文字列」を取得しているように見えることです。実際、ファイルを保存すると開くことができ、人間が読める形式になっています。 I.E.私のUint8Arrayが{"0" : "51", "1" : "52", "2" : "53" }だった場合

ダウンロードしたblobをテキストエディタで開くことができますが、「515253」が表示されますが、これが何が起こっているのかはわかりません。

適切にフォーマットされたファイルのファイルダウンロードへのリンクを作成して、正しい値を取得して読み戻すにはどうすればよいですか?

8
Derek

結局のところ、問題は、Blobの作成時に構文エラーが発生したことでした。

修正されたコードはvar blob = new Blob([myArr], {type: "octet/stream"};のようになりました

すでにArrayBuffer引数を渡しているのに、なぜ角かっこ表記が必要なのか、よくわかりません。冗長に見えますか?

11
Derek

Mozillaによると

https://developer.mozilla.org/en-US/docs/Web/API/Blob#Example_for_creating_a_URL_to_a_typed_array_using_a_blob

var blob = new Blob([typedArray.buffer], {type: 'application/octet-stream'});
3
Jan Doleczek