GET や POST などの基本的な http リクエストに axios を使用していますが、うまく機能しています。今度は Excel ファイルもダウンロードできるようにする必要があります。これは axios で可能ですか? もし可能であれば、サンプル コードを持っている人はいますか? そうでない場合、React アプリケーションで同じことを行うために他に何を使用できますか?
ベストアンサー1
- Axiosでファイルをダウンロード
responseType: 'blob'
- Axios/Serverからの応答内のBLOBを使用してファイルリンクを作成する
<a>
手順2で作成したファイルリンクにリンクされたhrefを持つHTML要素を作成し、リンクをクリックします。- 動的に作成されたファイルリンクとHTML要素をクリーンアップする
axios({
url: 'http://api.dev/file-download', //your url
method: 'GET',
responseType: 'blob', // important
}).then((response) => {
// create file link in browser's memory
const href = URL.createObjectURL(response.data);
// create "a" HTML element with href to file & click
const link = document.createElement('a');
link.href = href;
link.setAttribute('download', 'file.pdf'); //or any other extension
document.body.appendChild(link);
link.click();
// clean up "a" element & remove ObjectURL
document.body.removeChild(link);
URL.revokeObjectURL(href);
});
奇妙な点をチェックしてくださいhttps://gist.github.com/javilobo8/097c30a233786be52070986d8cdb1743
完全なクレジット:https://gist.github.com/javilobo8
詳しいドキュメントURL.createObjectURL
MDNで入手可能です。オブジェクトをリリースする際には、URL.revokeObjectURL
メモリ リークを防ぐためです。上記の関数では、すでにファイルをダウンロードしているので、オブジェクトをすぐに取り消すことができます。
createObjectURL() を呼び出すたびに、同じオブジェクトに対して既に URL を作成している場合でも、新しいオブジェクト URL が作成されます。これらの URL は、不要になったときに URL.revokeObjectURL() を呼び出して解放する必要があります。
ブラウザは、ドキュメントがアンロードされるとオブジェクト URL を自動的に解放しますが、パフォーマンスとメモリ使用量を最適化するために、明示的にアンロードできる安全なタイミングがある場合は、そうする必要があります。