JavaScriptアプリと、Excelファイルを作成し、次のヘッダーを持つバイト配列を返すAPIがあります。
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Content-Disposition:attachment; filename=List.xlsx
ExcelリソースAPIのURLにアクセスすると、Excelファイルをダウンロードするように求められます。私がそうすれば、それはうまくダウンロードしてExcelで開きます。すべてが良いです。
今問題に:
ユーザーのブラウザウィンドウでAPI URLを公開したくないので、私の目標は次のとおりです。
私が持っているのはこれです:
ファイルをダウンロードしますが、ファイルを開こうとすると、Excelで有効なExcelファイルとして認識されません。
// "data" is the contents from the server
var reader = new FileReader();
var blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
reader.readAsDataURL(blob);
reader.onloadend = function (e) {
window.open(reader.result, 'Excel', 'width=20,height=10,toolbar=0,menubar=0,scrollbars=no', '_blank');
}
うまくいきました。次のコードをXMLHttpRequestオブジェクトに追加するだけです。
responseType: 'arraybuffer'
IEはデータURIを開くことができないため、IEでは機能しません。IE11でも機能しません。
とにかく私は見つけました FileSaver.jsと呼ばれる素晴らしいライブラリ これはすべての主要なブラウザー(IE10 +を含む)のファイルの保存を処理します