今回は、axios を使用して vue.js にダウンロード機能を実装する方法と、axios を使用して vue.js にダウンロード機能を実装するときの注意事項について説明します。以下は実際的なケースです。一見。
この記事は主に Zhihu の回答から来ています。小さいですが、非常に便利なコードです。axios がどのようにリクエストを取得し、ファイルをダウンロードするかについて答えなければなりません。 。
Ajaxがファイルをダウンロードできない理由
ブラウザのGET(フレーム、a)リクエストとPOST(フォーム)リクエストには次の特徴があります: レスポンスはブラウザによって処理されます
レスポンスの内容はバイナリファイル、
Stringなど
レスポンスは処理のためにJavascriptに渡されます
レスポンスの内容は文字列のみですしたがって、Ajax自体はできませんブラウザのダウンロード機能をトリガーします。
Axios はリクエストをインターセプトし、ダウンロードを実装します
ファイルをダウンロードするには、通常次の手順を使用します:
リクエストを送信するレスポンスを取得するレスポンスを使用して、戻り値はファイルです
ファイルの場合は、ページにフレームを挿入します
フレームを使用してブラウザのダウンロード取得を実装します
axios にインターセプタを追加できます:import axios from 'axios' // download url const downloadUrl = url => { let iframe = document.createElement('iframe') iframe.style.display = 'none' iframe.src = url iframe.onload = function () { document.body.removeChild(iframe) } document.body.appendChild(iframe) } // Add a response interceptor axios.interceptors.response.use(c=> { // 处理excel文件 if (res.headers && (res.headers['content-type'] === 'application/x-msdownload' || res.headers['content-type'] === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')) { downloadUrl(res.request.responseURL) <span style="color:#ff0000;"> res.data=''; res.headers['content-type'] = 'text/json' return res;</span> } ... return res; }, error => { <span style="color:#ff0000;">// Do something with response error return Promise.reject(error.response.data || error.message)</span> }) export default axios
その後、次のことができますaxios の get リクエストを通じてファイルをダウンロードします。 この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。
推奨読書:
Baidu の BAE を通じて vue プロジェクトを公開する方法以上がaxiosを使ってvue.jsにダウンロード機能を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。