この記事では、参考までに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 を実行すると、サーバーへのファイルのアップロードが失敗する問題と解決策
この記事では、jQueryプラグインを使用してマインスイーパゲームを実装する2番目の記事を参考までに...
スクリプトの要件: MySQL データベースを毎日バックアップし、スクリプトを 7 日間保存します。...
カテゴリ選択を選択します。テストの結果、IE と FF はこの要素を適切にサポートできることがわかり...
この記事の例では、参考のためにvueアップロード画像コンポーネントの具体的なコードを共有しています。...
序文binlog は、MySQL のすべての追加、削除、および変更ステートメントを記録するバイナリ ...
この記事では、マルチカラムレイアウトドラッグを実装するためのVueの具体的なコードを参考までに共有し...
React は、ユーザー インターフェイスを構築するための JavaScript ライブラリです。 ...
先ほど、適応幅と高さが1:1の正方形を作成する方法について説明しました。 https://www.j...
Arthas はあなたのために何ができるでしょうか? Arthas 、開発者に深く愛されている Al...
フロントエンドとバックエンドがやり取りする場合、get または delete を介してバックエンドに...
目次MVCCとはMySQL ロックとトランザクション分離レベルMySQL 元に戻すログMVCCの実装...
しばらくReactを勉強した後、実践してみたいと思います。そこで、個人のブログのウェブサイトを再構築...
目次これ方法オブジェクト内これを隠した厳密モード要約するJavaScript の this も不思議...
以前、プロジェクトを開発しました。バックエンドのインターフェースを書くために Flask フレームワ...
Sttty は、Linux で端末設定を変更および印刷するための一般的なコマンドです。 1. パラ...