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 を実行すると、サーバーへのファイルのアップロードが失敗する問題と解決策

推薦する

Linux サーバーと Windows システム間でファイルをアップロードおよびダウンロードする方法

背景: Linux サーバーのファイルのアップロードとダウンロード。 XShell+Xftp インス...

MySQL ログの設定と表示方法

MySQL には次のログがあります。エラーログ: -log-errクエリログ: -logスロークエリ...

ウェブページからテキスト透かしを削除する2つの簡単な方法

<br /> 特定の Web サイトを閲覧して、優れた Web ページを見つけた場合、そ...

JavaScriptのvar let constの違いは何ですか?

目次1. 繰り返し宣言1.1 変数1.2 しましょう1.3 定数2. 可変プロモーション2.1 変数...

MySQL GTID の総合概要

目次01 GTIDの紹介02 GTIDの仕組み03 GTIDの利点と欠点04 テスト環境構築05 テ...

UDP 接続オブジェクトの原理分析と使用例

以前、UDP を使い始めるために簡単な UDP サーバーとクライアントの例を作成しましたが、実際に使...

Vueのシンプルな状態管理ストアモードを理解する方法

目次概要1. store.jsを定義する2. store.js を使用するコンポーネント3. 成果を...

Ubuntuはポート22を開きます

シナリオssh 経由で Ubuntu サーバーに接続するには、xshell ツールを使用する必要があ...

Linux bash: ./xxx: バイナリ ファイルを実行できません エラー

今日、Ubuntu 用の小さなツールを顧客に送りましたが、ユーザーはそれを受け取った後、実行できませ...

Dockerfile を使用して Docker でイメージを構築する方法

イメージを構築するこれまで、テストやデモンストレーションにさまざまなイメージを使用しました。多くの場...

Docker で Confluence をデプロイする

1. 環境要件1. Docker 17以上がインストールされている2. コンテナ操作docker r...

Tomcat の構成と最適化ソリューションの詳細な説明

サービス.xml Server.xml 構成ファイルは、コンテナー全体を構成するために使用されます。...

Web デザイン リファレンス Firefox デフォルト スタイル

W3C は HTML の標準をいくつか確立していますが、ブラウザは独自の定義済みスタイルに従って W...

Vueはシンプルな計算機能を実装します

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

MySQL トリガー: 複数のトリガー操作の作成例の分析

この記事では、例を使用して、MySQL で複数のトリガー操作を作成する方法について説明します。ご参考...