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

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

この記事では、参考までにVueのファイルのアップロードとダウンロードの具体的なコードを紹介します。具体的な内容は次のとおりです。

ファイルのアップロード

Vueでのファイルアップロードは、主にフロントエンドでファイルを取得し、バックエンドに送信するという2つのステップに分かれています。

ファイルを取得

フロントエンドは主に入力ボックスを使用してファイルを取得します

<el-dialog :title="addName" :visible.sync="dialogAddFile" width="500px" style="padding:0;" @close="resetAdd">
               添付ファイル名: <el-input v-model="addFileName" autocomplete="off" size="small" style="width: 300px;" ></el-input>
                <div class="add-file-right" style="height:70px;margin-left:100px;margin-top:15px;">
                    <div class="add-file-right-img" style="margin-left:70px;">ファイルをアップロード:</div>
                    <input type="file" ref="clearFile" @change="getFile($event)" multiple="multiplt" class="add-file-right-input" style="margin-left:70px;" accept=".docx,.doc,.pdf">
                    <span class="add-file-right-more">サポートされている拡張子: .doc .docx .pdf </span>
                </div>
                <div class="ファイルリストを追加">
                    <ul>
                        <li v-for="(item, index) in addArr" :key="index"><a >{{item.name}}</a></li>
                    </ul>
                </div>
                <div スロット="フッター" クラス="ダイアログ フッター">
                    <el-button type="primary" @click="submitAddFile" size="small">アップロードを開始</el-button>
                    <el-button @click="resetAdd" size="small">すべて削除</el-button>
               </div>
</el-ダイアログ>

最も重要なのは次のコード行です。

ファイルのアップロードは、ファイル タイプ入力ボックスを通じて実装されます。次に、multiple="multiplt" を設定することで複数のファイルがアップロードされ、accept を使用してアップロード ファイル タイプの制限が実装されます。最後に、change イベントをリッスンすることで、フロント エンドはアップロードされたファイルを取得します。

getFile(イベント){
           var ファイル = event.target.files;
           for(var i = 0;i<file.length;i++){
            // アップロード種別判定 var imgName = file[i].name;
                var idx = imgName.lastIndexOf(".");  
                (idx != -1)の場合{
                    var ext = imgName.substr(idx+1).toUpperCase();   
                    ext = ext.toLowerCase(); 
                     ext!='pdf' && ext!='doc' && ext!='docx' の場合{
                       
                    }それ以外{
                          this.addArr.push(ファイル[i]);
                    }   
                }それ以外{
 
                }
           }
       },

アップロードされたファイルは、変更イベントの event.target.files を通じて取得できますが、取得されるファイルの種類は上記で再度制限されています。

データの提出

ファイル データを取得したら、データをバックグラウンドに送信する必要があります。ここでは、FormData を使用して送信できます。

ファイルの追加を送信します(){
           if(0 == this.addArr.length){
             this.$メッセージ({
               タイプ: '情報'、
               メッセージ: 「アップロードするファイルを選択してください」
             });
             戻る;
           }
 
            var フォームデータ = 新しいフォームデータ();
            フォームデータを追加します。
            フォームデータを追加します。
            formData.append('rfilename',this.addFileName);
            for(var i=0;i<this.addArr.length;i++){
                formData.append('fileUpload',this.addArr[i]);
            }
          設定 = {
            ヘッダー: {
              'コンテンツタイプ': 'multipart/form-data',
              「認証」: this.token
            }
          };
          this.axios.post(apidate.uploadEnclosure、formData、config) は、
            .then((応答) => {
                if(response.data.info=="成功"){this.$message({
                        タイプ: '成功'、
                        メッセージ: '添付ファイルが正常にアップロードされました!'
                    });
                }
            })
        }

データを送信する際には、formData オブジェクトと Content-Type の 2 つの点に注意する必要があります。この 2 つの点を処理すれば、他のインターフェースと同じです。

ファイルをダウンロードする

最初のステップは、サーバーからファイルのリストを取得して表示することです。

<div class="ファイルについて">
    <div class="about-file-title">関連資料</div>
    <ul>
        <li v-for="(item, index) in tenEnclosure.rows" :key="index">
              <a target="_self" >{{item.tenPencSourname}}</a>
              <span @click="toxiazai(index,4,item.tenureId)" title="ダウンロード"></span>
              <span @click="toshanchu(index,4,item.tenureId)" title="削除"></span>
       </li>
   </ul>
</div>

次に、クリック ダウンロード イベントを完了します。

toxiazai(インデックス,数値,ID){
          var tempForm = document.createElement("form"); //フォームを作成し、フォームのさまざまなパラメータに従います tempForm.id = "tempForm1";
          tempForm.method = "post";
          tempForm.action = apidate.downloadEnclosure;
          tempForm.target="_";
          var hideInput1 = document.createElement("入力");
          入力1を非表示にします。属性を設定します('type','hidden');
          入力1を非表示にします。属性を設定します('名前','linkId');
          入力1を非表示にします。属性を設定します('id','linkId');
          入力1を非表示にします。属性を設定します('値'、id);
          tempForm.appendChild(入力1を非表示);
 
          var hideInput2 = document.createElement("入力");
          入力属性を非表示にします。
          入力2を非表示にします。属性を設定します('名前','数値');
          入力2を非表示にします。属性を設定します('id','num');
          入力2を非表示にします。属性を設定します('値',数値);
          tempForm.appendChild(入力2を非表示);
 
 
          if(ドキュメント.all){
            tempForm.attachEvent("onsubmit",function(){}); //IE
          }それ以外{
            var subObj = tempForm.addEventListener("submit",function(){},false); //Firefox
          }
          document.body.appendChild(tempForm);
          if(ドキュメント.all){
            tempForm.fireEvent("onsubmit");
          }それ以外{
            tempForm.dispatchEvent(新しいイベント("送信"));
          }
          tempForm.submit();//POST リクエストを送信document.body.removeChild(tempForm);
},

ファイルをオンラインで開く

PC側では多くのファイルがダウンロードされますが、携帯電話側ではほとんどのファイルがオンラインで直接開かれます。ファイルをオンラインで開きたい場合は、aタグのhref属性を使用して

<ul>
     <li v-for="(item,index) in noticeList" v-bind:key="index" class="person-list" @click="notice(index)">
          <div class="人リスト名">
              <a v-bind:href="[filePrefix+item.uuid_name]" rel="external nofollow" rel="external nofollow" >{{item.file_name}}</a>
         </div>
         <div class="person-list-time">アップロード時間: {{item.create_time}}</div>
     </li>
</ul>

このメソッドを使用してファイルを開く場合は完全なパス名が必要ですが、バックグラウンドからリストを取得する場合は通常相対パスであるため、パスの結合が必要です: v-bind:href="[filePrefix+item.uuid_name]"

画像のアップロードとプレビュー

ファイルをアップロードすると、表示用のファイル名を取得できます。ただし、この方法で写真をアップロードすると、表示は写真名ではなく、写真の表示になってしまいます。

例えば、上記の効果を実現するには、入力を使用して画像をアップロードします

<div class="list-img">
                <ul>
                    <li v-for="(item,index) in imgArr" :key="index">
                        <img :src="item.path" alt="" >
                        <a @click="todel(インデックス)"></a>
                    </li>
           <li>
            <div class="addImg" v-if="imgArr.length<3">
                  <span class="add">写真をアップロード</span>
                  <span class="add">(写真を3枚までアップロードしてください)</span>
                  <input type="file" @change="getFile($event)" accept=".jpg,.png,.bmp,.gif">
             </div>
         </li>
     </ul>
</div>
getFile(イベント){
            var ファイル = event.target.files;
            for(var i = 0;i<file.length;i++){
               // アップロード種別判定 var imgName = file[i].name;
                var idx = imgName.lastIndexOf(".");  
                (idx != -1)の場合{
                    var ext = imgName.substr(idx+1).toUpperCase();   
                    ext = ext.toLowerCase(); 
                    ext!='jpg' && ext!='png' && ext!='bmp' && ext!='gif' の場合{
                        
                    }それ以外{
                            this.imgArr.push(ファイル[i]);
                    }   
                }それ以外{
 
                }
            }
        },

イベント オブジェクトを印刷すると、アップロードされた画像にデバイス上の画像のアドレスに対応するパス フィールドが含まれていることがわかりました。このように画像を表示できることを当然のことと考えていました。その結果、明らかにエラーが発生しました。インターネットで調べたところ、入力を使用してアップロードされた画像を表示するには、FileReader を使用する必要があることがわかりました。

具体的には、入力によって得られた画像をすぐに表示することはできません。両者は全く異なるものなので、表示された画像を格納するための配列が必要になります。

getFile(イベント){
            var ファイル = event.target.files;
            that = this とする;
            for(var i = 0;i<file.length;i++){
               // アップロード種別判定 var imgName = file[i].name;
                var idx = imgName.lastIndexOf(".");  
                (idx != -1)の場合{
                    var ext = imgName.substr(idx+1).toUpperCase();   
                    ext = ext.toLowerCase(); 
                    ext!='jpg' && ext!='png' && ext!='bmp' && ext!='gif' の場合{
                        
                    }それ以外{
                            that.imgArr.push(ファイル[i]);
                    }   
                }それ以外{
 
                }
                //アップロードされた写真を表示する let reader = new FileReader()
                reader.readAsDataURL(ファイル[i])
                reader.onload = 関数(e) {
                    that.imgShow.push(this.result);
                }
            }
        },

このように、データを送信するときにはimgArrが使用され、表示するときにはimgShowが使用されます

もう一つ注目すべき点は、削除操作もあるということです。ここでの削除操作は、インターフェース上では見えないだけでなく、削除された写真をバックグラウンドに渡す必要がないことも意味します。したがって、両方の配列を削除する必要があります。

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

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

<<:  SQL インジェクション脆弱性プロセスの例と解決策

>>:  docker ストレージを使用して Exit を実行すると、サーバーへのファイルのアップロードが失敗する問題と解決策

推薦する

フロントエンドJavaScript ES6の詳細について

目次1. はじめに1.1 Babel トランスコーダ1.2 ポリフィル2. let と const ...

MySQL の文字セット utf8 を utf8mb4 に変更する方法

MySQL 5.5 の場合、文字セットが設定されていない場合、MySQL のデフォルトの文字セットは...

VMWare 仮想マシン 15.X LAN ネットワーク構成チュートリアル図

最近、分散型およびビッグデータ技術について学ぶために、いくつかの仮想マシンに取り組んでいます。まず、...

非常に優れた CSS スキル 10 選のコレクションと共有

ここでは、CSS テクニックを巧みに使用することで、HTML を変更せずにブログやテンプレートの外観...

jsはFileReaderを使用してローカルファイルまたはBLOBを読み取ります

目次FileReaderはローカルファイルまたはBLOBを読み取ります1. FileReaderの使...

Linux環境でOpenSSL証明書を生成する

1. 環境: CentOS7、OpenSSL1.1.1k。 2. コンセプト:ルート証明書: サーバ...

クラウドネイティブテクノロジー Kubernetes (K8S) の紹介

目次01 Kubernetes とは何ですか? 02 KubernetesとCompost+Swar...

Vueはシンプルなメモ帳機能を実装します

この記事では、参考までに、簡単なメモ帳機能を実装するためのVueの具体的なコードを紹介します。具体的...

Vue.js ドラッグ可能なテキストボックスコンポーネントの使用方法の詳細な説明

目次コンポーネントの登録コンポーネントの追加ソースコードドラッグ可能なテキスト ボックスでは、ユーザ...

MySQL の基本: グループ化関数、集計関数、グループ化クエリの詳細な説明

目次1. 使い方が簡単2. DISTINCTを使用して重複を削除する3. COUNT()の詳細な紹介...

Maxwell を使用して MySQL データをリアルタイムで同期する方法

目次マクスウェルについてMaxwellの設定と使用1. Maxwellインストールパッケージをダウン...

JavaScriptで計算機機能を実現するプロセスの詳細な説明

目次1. 電卓機能の紹介2. 計算機ページのデザイン1. ナビゲーションバー2. データ部分3. i...

Docker ベースの Redis クラスターの構築方法

Redisイメージをダウンロードする docker pull yyyyttttwww/redis を...

HTML でカスタム画像を使用してチェックボックスを表示する方法

チェックボックスの使用を実装するために画像を使用する必要がある場合は、それを使用して実装できます。実...

面白いウェブサイトをデザインするための方法とテクニック(写真)

他の人から「つまらない」とか「時代遅れ」というフィードバックを受けて、それを変更しようとしたのに、更...