#やりたいこと
これもタイトル通りなのですが、仕事の要件的にSOAPでサーバーサイドプログラムを使用せずにJavascriptだけでbase64binaryをブラウザでダウンロードさせるというものがあり、苦戦したので自分メモとして書いときます。
##ソースからの解説
atobでASCIIからBinaryへ変換し、それを1文字ずつUnicodeの数値に変換し、その数字を配列化します。
この配列をBlobコンストラクタに入れてtypeをExcelの形式で指定します。
このBlobをcreateObjectURLでブラウザのメモリに展開してaタグを作成し、強制的にクリックしたことにしてダウンロードさせます。
sample.js
var filename = 'something';
var binary = 'バイナリ文字列ーーーUEsDBBQACAgIABp2QlEAAAAAAAAAAAAAAAALAAAAX3JlbHMvLnJlbHOtksFqwzAMhl/F6N447WCM
UbeXMuhtjO4BNFtJTGLL2NqWvf3MLltLChvsKCRDQANAGgDAAAYBAEAAAA=ーーー的な';
binary = atob(binary);
var decoded_array = new Uint8Array(Array.prototype.map.call(binary, c => c.charCodeAt()));
var decoded = new Blob([decoded_array], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"});
var url = window.URL.createObjectURL(decoded);
var a = document.createElement("a");
a.href = url;
a.download = filename + ".xlsx";
a.click();
window.URL.revokeObjectURL(url);
#大変参考にさせていただきました
Blob, ArrayBuffer, Uint8Array, DataURI の変換
JavaScriptでBase64エンコード・デコード(UTF-8も)