この記事では、参考までに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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: docker ストレージを使用して Exit を実行すると、サーバーへのファイルのアップロードが失敗する問題と解決策
目次1. はじめに1.1 Babel トランスコーダ1.2 ポリフィル2. let と const ...
MySQL 5.5 の場合、文字セットが設定されていない場合、MySQL のデフォルトの文字セットは...
最近、分散型およびビッグデータ技術について学ぶために、いくつかの仮想マシンに取り組んでいます。まず、...
ここでは、CSS テクニックを巧みに使用することで、HTML を変更せずにブログやテンプレートの外観...
目次FileReaderはローカルファイルまたはBLOBを読み取ります1. FileReaderの使...
1. 環境: CentOS7、OpenSSL1.1.1k。 2. コンセプト:ルート証明書: サーバ...
目次01 Kubernetes とは何ですか? 02 KubernetesとCompost+Swar...
この記事では、参考までに、簡単なメモ帳機能を実装するためのVueの具体的なコードを紹介します。具体的...
目次コンポーネントの登録コンポーネントの追加ソースコードドラッグ可能なテキスト ボックスでは、ユーザ...
目次1. 使い方が簡単2. DISTINCTを使用して重複を削除する3. COUNT()の詳細な紹介...
目次マクスウェルについてMaxwellの設定と使用1. Maxwellインストールパッケージをダウン...
目次1. 電卓機能の紹介2. 計算機ページのデザイン1. ナビゲーションバー2. データ部分3. i...
Redisイメージをダウンロードする docker pull yyyyttttwww/redis を...
チェックボックスの使用を実装するために画像を使用する必要がある場合は、それを使用して実装できます。実...
他の人から「つまらない」とか「時代遅れ」というフィードバックを受けて、それを変更しようとしたのに、更...