一般的に、URL に基づいてファイルをダウンロードする場合、次の 2 つの解決策があります。 1. window.open(url) ただし、開発プロセス中に、バックエンドから返されるファイル アドレスが Web サイトと同じソースからのものではないという状況に遭遇することがあります。上記の 2 つのソリューションを使用して画像、PDF、その他のファイルをダウンロードすると、ブラウザーはダウンロードせずに直接開きます。この状況は次の方法で解決できます。 「axios」からaxiosをインポートします。 // ファイルをダウンロードします(クロスドメインダウンロードの問題を解決できます) エクスポート非同期関数downloadFile(fileUrl, fileName) { if (!fileUrl) が return; res = axios({ を待ちます メソッド: "get", url: ファイルURL、 レスポンスタイプ: "blob" }); newUrl = window.URL.createObjectURL(res.data); とします。 a = document.createElement("a"); とします。 新しいUrlを作成します。 a.download = ファイル名; クリック(); 削除(); //リソースのダウンロードが完了したら、createObjectURL によって占有されているキャッシュ リソースを手動でクリアできます。window.URL.revokeObjectURL(newUrl); } 使用 <テンプレート> <div> {{ファイル名}} <span class="ファイルダウンロード" @click="downloadFile(file.url, file.name)" >ダウンロード > </div> </テンプレート> <スクリプト> 「@/util/index.js」からダウンロードファイルをインポートします。 エクスポートデフォルト{ コンポーネント: {}, データ() { 戻る { ファイル:{ url:'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fb.zol-img.com.cn%2Fdesk%2Fbizhi%2Fimage%2F6%2F960x600%2F1426818724752.jpg&refer=http%3A%2F%2Fb.zol-img.com.cn&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1627377638&t=662034e86ff9110854ca0316485e294b', 名前:「美しい風景」 } }; }, 作成された() {}, マウント() {}, メソッド: { ダウンロードファイル } }; </スクリプト> <style lang="scss" スコープ> </スタイル> PS: VueでURLをクリックしてファイルをダウンロードするための最適なソリューションこの種の機能は開発でよく遭遇します。ユーザーがファイルや添付ファイルをサーバーにアップロードし、バックエンドがファイルを FTP またはその他の場所に置きます。フロントエンド ページにダウンロード エントリがあります。バックエンドが BLOB を返すこともありますが、もちろんこれが最善です。ただし、利便性のために、バックエンドがファイルの場所の URL を返すこともあります。このとき、フロントエンドでいくつかの問題が発生する可能性があります。たとえば、ファイルのダウンロード時にブラウザが点滅することがあります。画像、JSON ファイル、およびブラウザでサポートされているその他のファイルをダウンロードする場合、それらはダウンロードされず、ブラウザで直接開かれます。次の方法は、このような問題を完全に解決できます。 解決:
コードの実装
/* * バックエンドはファイルの URL を返し、フロントエンドはそれをダウンロードするためのタグを作成します* * 1. ファイルが画像またはブラウザでサポートされている形式の場合、ダウンロードをクリックするとファイルが直接開かれる問題を解決しました。 * 2. ファイルをダウンロードするときにブラウザがちらつくことがあります* * ページ内での使用 * 1. ディレクティブ import downLoad from '@/directive/down-load-url' をインポートします。 * 2. ディレクティブを登録する:{downLoad} * 3. ダウンロード ボタンのコマンドとして使用します。例: <el-button v-downLoad="url">ダウンロード</el-button> */ './downLoad' から downLoad をインポートします const インストール = 関数(Vue) { Vue.directive('downLoadUrl', ダウンロード) } downLoad.install = インストール デフォルトのダウンロードをエクスポート download-url/downLoad.js ファイルエクスポートデフォルト { bind(el, バインディング) { el.addEventListener('クリック', () => { console.log(binding.value) // url 定数a = document.createElement('a') // let url = baseUrl + binding.value // URLが不完全な場合は、baseURLを連結する必要があります const url = binding.value // 完全なURLが直接使用されます // ここでURLをBLOBアドレスに変換します。 fetch(url).then(res => res.blob()).then(blob => { // リンクアドレスの文字列コンテンツをblobアドレスに変換します。a.href = URL.createObjectURL(blob) コンソールログ(a.href) a.download = '' // ダウンロードしたファイルの名前// a.download = url.split('/')[url.split('/').length -1] // // ダウンロードしたファイルの名前document.body.appendChild(a) クリック() }) }) } } Vue が URL に従って非同一オリジン ファイルをダウンロードする方法についての説明はこれで終わりです。より関連性の高い Vue URL ダウンロード ファイル コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Centos8 で yum を使用して rabbitmq をインストールするチュートリアル
>>: MySQL (InnoDB) がデッドロックを処理する方法の詳細な説明
これは主に、場所パラメータのif判断の設定ジャンプです。迂回により、サーバーの負荷と圧力を軽減できま...
序文プロジェクトの要件は、ユーザーの現在の位置が特定の地理的位置範囲内にあるかどうかを判断することで...
目次1. プロセスの基本的な概要2. プロセスの構成要素3. プロセス環境4. プロセスステータス5...
フロントエンド開発者が必ず知っておくべきケースとして、タブバーの切り替え効果があります。タブバー自体...
2つの状況がある1. 開始時間と終了時間が同じボックス内にあります(今月のみ限定) 2. 開始時間と...
この記事では、アコーディオン効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...
Web デザイナーとして豊富な CSS 経験を持つ私たちは、あらゆる種類のコード構文、互換性、スニペ...
目次序文脱構築記号の役割使い方分割割り当ての適用アプリケーションの簡単な紹介JSONデータを抽出する...
以下に、一般的な MySQL コマンドをいくつか示します。 -- データベース サービスを開始します...
ファイルをディレクトリに解凍しますこれは解凍後のディレクトリですmy.iniファイルを入力しますダブ...
導入Memcached は分散キャッシュ システムです。Memcached には認証とセキュリティ制...
mysql ログインのコマンド形式は次のとおりです。 mysql -h [hostip] -u [ユ...
JavaScript ネイティブ コードの記述能力を高め、setTimeout() の使用を強化する...
概要実際のビジネス シナリオ アプリケーションでは、ビジネス条件に基づいて対象データを取得およびフィ...
Optgroup は、ドロップダウン リストのコンテンツをより整理するために、select タグで使...