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

推薦する

Zookeeperスタンドアロン環境とクラスタ環境の構築

1. 単一マシン環境の構築# 1.1 ダウンロードZookeeper の対応するバージョンをダウンロ...

Hタグの定義と注意事項について簡単に説明します

結果から判断すると、タイトルを定義するための固定パターンはなく、すべてむしろランダムな感じがします。...

Windows に異なる (2 つの) バージョンの MySQL データベースをインストールする詳細なチュートリアル

1. 原因: SQL ファイルをインポートする必要があるのですが、インポートできません。この文を実行...

MySQLデータベースの増分バックアップのアイデアと方法

MySQL データベースの増分バックアップを実行するには、データベース構成ファイル /etc/my....

HTML+CSSで充電水滴融合特殊効果コードを実現

目次序文:成し遂げる:要約:まず効果を見てみましょう: 序文:このアイデアは、Bilibili のア...

WeChatアプレットは水平および垂直スクロールを実現

この記事の例では、WeChatアプレットの水平スクロールと垂直スクロールを実現するための具体的なコー...

LinuxベースのLVMシームレスディスク水平拡張の詳細な説明

環境名前財産CPU 5650 円メモリ4Gディスク20G+4TB この時点で、サーバーにはすでに次の...

リンク更新ページと js 更新ページの使用例

1. リンクの使用方法:コードをコピーコードは次のとおりです。 <a href="j...

テンプレートタグの使用方法の詳細な説明(Vue での使用方法の概要を含む)

目次1. HTML5のテンプレートタグ2. テンプレートタグ操作のプロパティとメソッド3. Vueの...

Reactはtodolistの追加、削除、変更、クエリを実装します

目次ToDoリストを例に挙げましょうディレクトリは次のとおりですアプリ入力.jsリスト.jsアイテム...

CSS3 を使用して楕円軌道の回転を実装するサンプルコード

最近、次のような効果を達成する必要がある最初は、CSS3D回転を使用して記述すると、次の効果しか得ら...

W3C チュートリアル (10): W3C XQuery アクティビティ

XQuery は、XML ドキュメントからデータを抽出するための言語です。 XQuery は、XML...

Linux システムのデュアル ネットワーク カード バインディング構成の実装

システムバージョン [root@ ~]# cat /etc/redhat-release CentO...

Vueはページを更新するために3つの方法を使用する

プロジェクトを作成しているときに、ユーザーがアクションを実行し、特定の状態を変更し、ページを更新して...

MySQL データベースで機密データの暗号化と復号化を実装する方法

目次1. 準備2. MySQL暗号化関数方式2.1 MySQL 暗号化2.2 MYSQL 復号化3....