axiosを使用してファイルをダウンロードする方法 質問する

axiosを使用してファイルをダウンロードする方法 質問する

GET や POST などの基本的な http リクエストに axios を使用していますが、うまく機能しています。今度は Excel ファイルもダウンロードできるようにする必要があります。これは axios で可能ですか? もし可能であれば、サンプル コードを持っている人はいますか? そうでない場合、React アプリケーションで同じことを行うために他に何を使用できますか?

ベストアンサー1

  1. AxiosでファイルをダウンロードresponseType: 'blob'
  2. Axios/Serverからの応答内のBLOBを使用してファイルリンクを作成する
  3. <a>手順2で作成したファイルリンクにリンクされたhrefを持つHTML要素を作成し、リンクをクリックします。
  4. 動的に作成されたファイルリンクと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.createObjectURLMDNで入手可能です。オブジェクトをリリースする際には、URL.revokeObjectURLメモリ リークを防ぐためです。上記の関数では、すでにファイルをダウンロードしているので、オブジェクトをすぐに取り消すことができます。

createObjectURL() を呼び出すたびに、同じオブジェクトに対して既に URL を作成している場合でも、新しいオブジェクト URL が作成されます。これらの URL は、不要になったときに URL.revokeObjectURL() を呼び出して解放する必要があります。

ブラウザは、ドキュメントがアンロードされるとオブジェクト URL を自動的に解放しますが、パフォーマンスとメモリ使用量を最適化するために、明示的にアンロードできる安全なタイミングがある場合は、そうする必要があります。

おすすめ記事