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環境を構築する方法

推薦する

ドメイン名、ポート、IPに基づいてnginx仮想ホストを構築する

nginxでサポートされている仮想ホストには3つの種類があります1. ドメイン名ベースの仮想ホスティ...

CocosCreator で http と WebSocket を使用する方法

目次1. HTTPGET 2. HTTP POSTウェブソケット4. Egretのhttpとwebs...

Docker-compose を使用して GitLab をデプロイする方法

Docker-compose は GitLab をデプロイします1. Dockerをインストールする...

MySQL 8.0.12 インストール グラフィック チュートリアル

MySQL8.0.12 インストールチュートリアルをみんなで共有します。 1. インストール1.イン...

JavaScript 遅延読み込みの詳細な説明

目次遅延読み込みCSS スタイル: HTML部分:スクリプト部分:要約する遅延読み込み名前の通り、私...

MySQL の指定文字によるマージと分割の例のチュートリアル

序文指定した文字による結合または分割は一般的なシナリオです。MySQL では結合の記述は比較的簡単で...

MySQL のインデックス有効条件とインデックス無効条件の結合

目次1. ジョイントインデックスの故障の条件2. インデックス失敗の条件1. ジョイントインデックス...

node.js で PC 上の WeChat アプレット パッケージを復号化するための処理アイデア

目次アプレットのソースコードはどこにありますか? PC ミニプログラムはどのように暗号化されますか?...

20個のJavaScriptワンラインコードを共有する

目次1. ブラウザのクッキーの値を取得する2. RGBを16進数に変換する3. クリップボードにコピ...

MySQL 5.7.20 のインストールと設定方法のグラフィック チュートリアル (win10)

この記事では、MySQL 5.7.20のインストールと設定方法を参考までに紹介します。具体的な内容は...

Mysql ファジークエリが大文字と小文字を区別するかどうかの詳細な調査

序文最近、私は小さな個人ブログ プロジェクトを書くのに忙しくしています。 「グローバル検索」機能を実...

CSS で実装された円形のプログレスバー

成果を達成する 実装コードhtml <div class="wrap"&g...

CSS レイアウト チュートリアル: 垂直方向の中央揃えを実現する方法

序文最近、フロントエンドの知識をまとめており、いくつかのインタビューにも参加しました。インタビュー中...

MySQLで時間別データと最後の時間別データの差をクエリするアイデアの詳細な説明

1. はじめに要件は、特定の時間範囲内で、1 時間ごとのデータと前の 1 時間ごとのデータの差と比率...