Vue は zip ファイルのダウンロードを実装します

Vue は zip ファイルのダウンロードを実装します

この記事の例では、Vueの具体的なコードを共有し、zipファイルをダウンロードして参考にしています。具体的な内容は次のとおりです。

エルボタン

<el-button size="mini" type="success" @click="downloadHandle(fileName, fileLocation)">ダウンロード</el-button>

js処理命令

リクエストインターセプター request.js

Axiosが導入され、axiosインスタンスが作成され、リクエストインターセプターが追加されます

'axios' から axios をインポートします


// axiosインスタンスを作成する const service = axios.create({
  baseURL: '', // API のベース URL
  timeout: 20000, // リクエストタイムアウトパラメータ: {
 // リクエストパラメータ}
});

// リクエストインターセプター service.interceptors.request.use(config => {
  // .... 設定追加処理......
  
  設定を返す
}

デフォルト サービスをエクスポートする

リクエスト インターセプターはリクエストの前に処理され、HTTP ヘッダー設定を追加できます。次に例を示します。

1. HTTPリクエストヘッダー:トークン、Cookie、セッションなどの値が追加されます(config.headers['backend value name'] = 'related value';):

(1) config.headers['token'] = 'トークン値';
(2) config.headers['cookie'] = 'Cookie値';
(3) config.headers['session'] = 'セッション値';

2. ヘッダー投稿設定: Content-Typeなど

ファイルをアップロードするには、config.headers.post['Content-Type'] = 'multipart/form-data'; を使用します。

zipファイルをダウンロード

1. request.js コード:

'axios' から axios をインポートします


// axiosインスタンスを作成する const service = axios.create({
  baseURL: '', // APIのベースURL
  timeout: 20000, // リクエストタイムアウトパラメータ: {
 // リクエストパラメータ}
});

// リクエストインターセプター service.interceptors.request.use(config => {
  // config トークン値を追加 config.headers['token'] = getToken(); // getToken() は値取得メソッドで、システム検証では return config を使用します
}

デフォルト サービスをエクスポートする

2. Vueページはrequest.jsを参照します

'@/utils/request' からリクエストをインポートします

ダウンロード処理

// fileName ダウンロード設定名、fileLocation ファイル保存場所名 downloadHandle(fileName,fileLocation) {
   プローム = {
     ファイルの場所: ファイルの場所
   }
   リクエスト.post(
    '/api/downloadFile', 
    プロム、 
    {
      レスポンスタイプ: 'blob',
      タイムアウト: 60000
    }
   ).then(応答 => {
     応答サイズが等しい場合
       this.$メッセージ({
         メッセージ: 「ダウンロード可能なファイルがありません」
         タイプ: '警告'
       })
       戻る
     }
     const url = window.URL.createObjectURL(新しいBlob([応答]))
     定数リンク = window.document.createElement('a')
     link.style.display = 'なし'
     link.href = URL
     link.setAttribute('download', ファイル名+'.zip')
     document.body.appendChild(リンク)
     リンク.クリック()
   }).catch((データ) => {
     コンソール.log(データ)
   })
},

バックグラウンド処理

リクエスト /api/downloadFile に基づいて Java API によって処理されます

パッケージ com.web.controller;

org.springframework.web.bind.annotation.RequestBody をインポートします。
org.springframework.web.bind.annotation.RequestMapping をインポートします。
org.springframework.web.bind.annotation.RestController をインポートします。

javax.servlet.http.HttpServletRequest をインポートします。
javax.servlet.http.HttpServletResponse をインポートします。
java.io.File をインポートします。
java.io.FileInputStream をインポートします。
java.io.OutputStream をインポートします。
java.net.URLEncoder をインポートします。
java.util.Map をインポートします。

@レストコントローラ
@リクエストマッピング("/api")
パブリッククラスDownloadFileDemo {

    /**
     * ファイルのダウンロード * @param tranNap
     * @param リクエスト
     * @param レスポンス
     */
    @RequestMapping(値 = "/downloadFile")
    パブリック void downloadFile(@RequestBody Map<String, Object> tranNap、HttpServletRequest リクエスト、HttpServletResponse レスポンス) {
        文字列 fileLocation = tranNap.get("fileLocation")+"";
        試す {
            文字列 filePath = "D:/file/" + fileLocation + ".zip";
            //ファイルを取得します。File file = new File(filePath);
            ファイルが存在する場合(){
                System.out.println("[ファイルのダウンロード] ダウンロード可能なファイルがありません");
                戻る;
            }
            FileInputStream ファイル入力ストリーム = 新しい FileInputStream(ファイル);
            //ブラウザにファイル名をダウンロードするように指示するHttpレスポンスヘッダーを設定します。Filename
            response.setHeader("Content-Disposition", "attachment;Filename=" + URLEncoder.encode(fileLocation+".zip", "UTF-8"));
            出力ストリーム outputStream = response.getOutputStream();
            byte[] バイト = 新しい byte[2048];
            長さ = 0;
            ((len = fileInputStream.read(bytes)) > 0) の場合 {
                出力ストリームに書き込みます(バイト数、0、長さ)。
            }
            ファイル入力ストリームを閉じます。
            出力ストリームを閉じます。
        } キャッチ (例外 e) {
            System.out.println("[ファイルのダウンロード] ファイルのダウンロード例外");
            e.printStackTrace();
            戻る;
        }
    }

}

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vueはボタンをクリックしてファイルをダウンロードする機能を実装します
  • VUE でファイルをダウンロードしてステータスを確認する方法
  • Vue を使用してファイル/画像を zip で一括ダウンロードする方法のチュートリアル
  • フロントエンド Vue でファイルをダウンロードする 3 つの方法のまとめ

<<:  ubuntu20.04 LTSにdockerをインストールする方法

>>:  Windows 10にWSL2 Ubuntu20.04をインストールしてdocker環境を構築する方法

推薦する

HTML の基礎: HTML コンテンツの詳細

まずは本体から始めましょう:ウェブページを閲覧するとき、最初に目に留まるのは通常、ページの背景です。...

Docker で MySQL サービスをデプロイする方法と、遭遇する落とし穴

最近、ポーターを学んでいます。こんなに強力なものがあったなんて、今まで知らなかった気がします。クラス...

この記事では、イベント委任を使用してJavaScriptメッセージボード機能を実装する方法について説明します。

イベント委任を使用してメッセージ ボード機能を実装します。 <!DOCTYPE html>...

実行中の時計を実装するための純粋な CSS3 コード

操作効果コードの実装html <div id="ウォッチ"> <...

JavaScript の setTimeout() の使用法の概要

目次1. はじめに2. setIntervalとsetTimeoutの違い3.タイムアウトを設定する...

VMware15 の CentOS7 インストールの詳細なプロセスとよくある問題 (画像とテキスト)

1. インストールパッケージの準備VMware-player-15.0.4-12990004、非商...

Vue ElementUI は非同期読み込みツリーを実装します

この記事の例では、vue ElementUI の非同期読み込みツリーを実装するための具体的なコードを...

Springboot プロジェクトに動的にパラメータを渡すための Docker の実装方法

背景最近、Docker 初心者の友人から、毎回プロジェクト構成ファイルにハードコーディングしてサービ...

MySQL デッドロック ルーチン: 一意のインデックスの下でのバッチ挿入順序の不一致

序文デッドロックの本質はリソースの競合です。バッチ挿入の順序が一貫していないと、デッドロックに陥りや...

XHTML CSS ページをプリンタ ページに変換する

<br />これまで、Web ページのプリンタ対応バージョンを作成するには、印刷したとき...

JavaScript オブジェクトの組み込みオブジェクト、値型、参照型の説明

目次物体オブジェクト定義オブジェクトのメンバーを反復処理するJS組み込みオブジェクト数学オブジェクト...

ログインと登録を実現するSpringboot+VUE

この記事の例では、ログインと登録を実装するためのspringboot+VUEの具体的なコードを参考ま...

バッテリー残量が少なくなったときに Linux を自動シャットダウンする方法

序文最近、私の住居の電力事情が不安定で、突然の停電が頻繁に起こります。ノートパソコンを持っているので...

テーブルを作成するための HTML dl、dt、dd タグとテーブル作成テーブル

ウェブサイトの開発とメンテナンスのコストが削減されるだけでなく、コードもよりセマンティックになります...

JavaScript におけるセミコロンの詳細

序文JavaScript ではセミコロンはオプションであり、使用するかどうかは主にコーディング スタ...