Vueはファイルのアップロードとダウンロード機能を実装します

Vueはファイルのアップロードとダウンロード機能を実装します

この記事では、ファイルのアップロードとダウンロード機能を実装するためのVueの具体的なコードを例として紹介します。具体的な内容は次のとおりです。

1. タグのダウンロード属性

H5では、ファイルを直接ダウンロードするためにaタグにダウンロード属性を追加し、ファイル名はダウンロード属性ファイル名になります。

  • 現在、download 属性は Google Chrome と Mozilla Firefox のみをサポートしています。他のブラウザではこの属性はサポートされていません。
  • ダウンロードは H5 の新しい属性です。以前は H5 にこの属性はありませんでした。

2. URL.createObjectURL

URL.createObjectURL() メソッドは、渡されたパラメータに基づいて、パラメータ オブジェクトを指す URL を作成します。この URL の有効期間は、作成されたドキュメント内でのみ存在します。新しいオブジェクト URL は、実行された File オブジェクトまたは Blob オブジェクトを指します。

File オブジェクトはファイルです。たとえば、input type="file" タグを使用してファイルをアップロードする場合、その中の各ファイルは File オブジェクトになります。

Blob オブジェクトはバイナリ データです。たとえば、new Blob() によって作成されたオブジェクトは Blob オブジェクトです。たとえば、XMLHttpRequest で responseType が blob として指定されている場合、戻り値も blob オブジェクトになります。

URL を window.URL || window.webkitURL とします。
downloadUrl = URL.createObjectURL(blob || file);

3. URL.revokeObjectURL

URL.revokeObjectURL() メソッドは、URL.createObjectURL() によって作成されたオブジェクト URL を解放します。オブジェクトが不要になった場合は解放する必要があります。解放されると、オブジェクト URL は指定されたファイルを指さなくなります。

ダウンロード URL と URL.revokeObjectURL(ダウンロード URL);

4. Vue.jsでファイルをアップロードおよびダウンロードする

<テンプレート>
    <div class="btn-box">
        <h3>ファイルのアップロード:</h3>
        <input class="file-input" type="file" @change="getFile($event)" />
        <el-button type="primary" @click="upload">ファイルをアップロード (POST)</el-button>
        <h3>ファイルのダウンロード:</h3>
        <el-button type="primary" @click="downloadLink">リンクされたファイルをダウンロードする (window.open)</el-button>
        <el-button type="primary" @click="downloadBlobByGet">バイナリ ストリーム ダウンロード (GET)</el-button>
        <el-button type="primary" @click="downloadBlobByPost">バイナリ ストリーム ダウンロード (POST)</el-button>
    </div>
</テンプレート>
 
<スクリプト>
    「axios」からaxiosをインポートします
    エクスポートデフォルト{
        名前: "attendPoint"、
        データ() {
            戻る {、
                ファイル: null、
                ファイル名: "test.xlsx"
            }
        },
        メソッド: {
            // ファイルを選択 getFile(event) {
                this.file = イベントターゲットファイル[0];
            },
 
            // ファイルをアップロード (POST)
            アップロード() {
                url = "http://localhost:3000/upload/test";
                formData を新しい FormData() にします。
                formData.append("名前", "zhangsan");
                formData.append("年齢", "18");
                formData.append("ファイル", this.file);
                設定 = {
                    ヘッダー: {
                        「コンテンツタイプ」: 「マルチパート/フォームデータ」
                    }
                }
                axios.post(url, formData, config).then((res) => {
                    this.fileName = res.data.downloadUrl;
                    this.$message.success("アップロードに成功しました!");
                }).catch(() => {
                    this.$message.error("まずファイルをアップロードしてください!");
                })
            },
 
            // リンク付きのファイルをダウンロードする (window.open)
            ダウンロードリンク() {
                if (this.fileName) {
                    window.open("http://localhost:3000/download/test?fileName=" + this.fileName);
                }
            },
 
            //バイナリストリームのダウンロード (GET)
            非同期ダウンロードBlobByGet() {
                urlGet = "http://localhost:3000/download/test?fileName=" + this.fileName; とします。
                fileData を axios.get(urlGet, { responseType: "blob" }) で待機します。
                URL を window.URL || window.webkitURL とします。
                downloadUrl = URL.createObjectURL(fileData.data); とします。
                a = document.createElement("a"); とします。
                a.href = ダウンロードUrl;
                a.download = this.fileName; //ダウンロード後のファイル名 a.click();
                a = ヌル;
                ダウンロード URL と URL.revokeObjectURL(ダウンロード URL);
            },
 
            //バイナリストリームのダウンロード(POST)
            非同期ダウンロードBlobByPost() {
                urlPost = "http://localhost:3000/download/post/test" とします。
                fileData = axios({ を待ちます
                    メソッド: "post",
                    url: urlPost, // リクエスト アドレス data: { fileName: this.fileName }, // パラメーター responseType: "blob" // サーバーから返されるデータ タイプを示します })
                URL を window.URL || window.webkitURL とします。
                downloadUrl = URL.createObjectURL(fileData.data); とします。
                a = document.createElement("a"); とします。
                a.download = this.fileName;
                a.href = ダウンロードUrl;
                クリック();
                a = ヌル;
                ダウンロード URL と URL.revokeObjectURL(ダウンロード URL);
            },
        },
    }
</スクリプト>
 
<スタイルスコープ>
    .btnボックス{
        パディング: 20px;
    }
    .elボタン、
    入力{
        最大幅: コンテンツに適合;
        表示: ブロック;
        マージン: 20px;
    }
</スタイル>

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

以下もご興味があるかもしれません:
  • Vueはファイルのアップロードとダウンロードを実装します
  • ファイルのアップロードとダウンロードを実現する Springboot+vue
  • Vue Excel アップロード プレビューとテーブル コンテンツを Excel ファイルへダウンロード
  • Springboot はファイルのアップロードとダウンロードに vue を統合します
  • Vueはファイルのアップロード、読み取り、ダウンロード機能を実装します
  • Vue で Excel ファイルのアップロードとダウンロード機能を実装する 2 つの方法
  • vue-cli+axios はファイルのアップロードとダウンロード機能を実現します (ダウンロード受信バックグラウンドはファイルストリームを返します)

<<:  MySQLカーソルの使い方と機能の詳細な説明

>>:  Centos7 MySQL データベースのインストールと設定のチュートリアル

推薦する

JavaScript コンストラクタとプロトタイプの関係

目次1. コンストラクタとプロトタイプ1. コンストラクター2. コンストラクタ問題3. コンストラ...

Reactにおけるフックの一般的な使用法

目次1. フックとは何ですか? 2. フックはなぜ現れるのでしょうか? 3. よく使われるフックは何...

Vue+js はビデオのフェードインとフェードアウト効果を実現します

Vue+jsはビデオのフェードインとフェードアウトを実現します。参考までに、具体的な内容は次のとおり...

CentOS6.9 での MySQL 5.7.17 のインストールと設定のチュートリアル

CentOS6.9はMysql5.7をインストールします。参考までに、詳細は次のとおりです。 1. ...

MySQL8.0.18 複数マスターと 1 スレーブの構成

目次1. 現実的な背景2. 合意3. マスターを構成する3.1. 起動パラメータの設定3.2. パラ...

MySQL Limitクエリのパフォーマンスを向上させる方法

MySQL データベース操作では、一部のクエリを実行するときにデータベース エンジンが完全なテーブル...

MySQL 5.7 データベースのインストール手順の個人的な要約

1.mysql-5.7.19-winx64.zip(これは無料のインストールバージョンで、約318 ...

MySQL でコマンドを使用して階層検索を実現する方法の詳細な説明

序文この記事は主にMySQLコマンド階層検索ヘルプの使用に関する内容を紹介します。この記事のサンプル...

.htaccess を使用して特定の IP からの Web サイトへのアクセスを禁止する方法

序文コストを考慮して、ほとんどのウェブマスターは、多数の小規模なウェブサイト用にサーバーを個別に購入...

フロントエンド開発者は毎日HTMLタグの理解を学ばなければならない(1)

2.1 セマンティクス化により、Webページが検索エンジンに理解されやすくなりますこの章では、We...

Vue における {{}}、v-text、v-html の違いと用途の詳細な説明

{ {}} 値を取得すると、タグの元のコンテンツはクリアされませんv-textは値を取得し、タグの元...

分散ロックの原理と3つの実装方法の詳細な説明

現在、ほぼすべての大規模な Web サイトとアプリケーションは分散方式で展開されています。分散シナリ...

Vue の計算プロパティの紹介

目次1. 計算プロパティとは何ですか? 2. 計算プロパティの構文3. 例1. 計算プロパティとは何...

MySQLは重複しないデータ挿入を実装するためにUNIQUEを使用する

SQL UNIQUE制約UNIQUE 制約は、データベース テーブル内の各レコードを一意に識別します...

5分でWebRTCビデオチャットを構築する

前回の記事では、Ubuntu 上の webrtc ベースの多人数ビデオチャット サービスの詳細なコー...