vue項(xiàng)目中實(shí)現(xiàn)多文件上傳功能實(shí)例代碼
在vue項(xiàng)目中使用elementui 的 upload 上傳組件,完成多個(gè)文件一次上傳
一、效果圖:
1.選擇上傳的文件:
2、上傳完成:
3、刪除文件:
二、主要的代碼實(shí)現(xiàn)
注意處理列表中已上傳文件何待上傳文件,兩者其實(shí)有區(qū)分的標(biāo)志。我們可以在控制臺(tái)中輸出選擇上傳的文件列表,查看每個(gè)文件的代碼信息,觀察可以發(fā)現(xiàn),如果是已上傳的文件,則文件的狀態(tài)status=“success”,如果是待上傳文件,那么文件的狀態(tài)status=“ready”。我們可以通過(guò)文件的狀態(tài)來(lái)處理已上傳至服務(wù)器和待上傳至服務(wù)器的文件。
主要代碼如下:
<template> <div> <el-button type="text" @click="dialogVisible = true">上傳附件</el-button> <el-dialog width="400px" :visible.sync="dialogVisible" append-to-body> <div style="float:left"> <el-upload class="upload-demo" ref="upload" :limit="10" accept=".txt, .txts, .pdf, .docx" :multiple="true" action=" " :on-change="handleFileChange" :on-remove="onRemove" :before-remove="beforeRemove" :on-exceed="fileExceed" :auto-upload="false" :file-list="fileList" > <el-button slot="trigger" size="small" type="primary">選取附件</el-button> <el-button style="margin-left: 10px;" v-if="fileList.length>0" size="small" type="success" @click="submitFileForm">上傳附件</el-button> </el-upload> </div> <div slot="footer" class="dialog-footer"> <el-button @click="dialogVisible = false">取 消</el-button> <el-button type="primary" @click="submitFileForm">確 定</el-button> </div> </el-dialog> </div> </template> <script> import store from "../../../store" export default{ name:"uploadFile", data() { return { dialogVisible:false, //回顯附件列表 fileList: [], //上傳附件列表 files:[], }; }, mounted(){ //顯示已有附件 this.getFiles() }, methods:{ //by文章id獲取附件列表 getFiles(){ var articleId=0 articleId=store.state.articleMsg.row.id console.log(articleId) this.$store.dispatch('fileManage/getFiles',articleId).then(res=>{ if(res.succeeded){ res.data.forEach(file=>{ this.fileList.push({name:file.fileName,id:file.fileId}); }) } else { this.$message({ type:'error', message:'獲取附件失敗' }) } }) }, //上傳文件之前 beforeUpload(file){ this.fileList.forEach(item=>{ if(isEquael(item.fileName,file.name)){ return this.$message.warning("該文件已存在") } }) }, // 上傳發(fā)生變化鉤子 handleFileChange(file, fileList){ this.files = fileList; this.fileList.push(file) }, //文件個(gè)數(shù)超過(guò)最大限制時(shí) fileExceed(file, fileList){ if(this.fileList.length>10){ this.$message.warning("附件個(gè)數(shù)不能超過(guò)10個(gè)") } }, //刪除前的鉤子 beforeRemove(file, fileList) { return this.$confirm(`確定移除 ${ file.name }?`); }, //刪除的鉤子 onRemove(file,fileList){ if(file.status==="success") { var requestData=file.id this.$store.dispatch('fileManage/deleteFile',requestData).then(res=>{ if(res.succeeded){ this.fileList.pop(file) this.fileList=[]; this.files = fileList; this.$message({ type: 'success', message: '刪除成功!' }); this.getFiles() }else{ this.$message({ type: 'error', message: '刪除失敗!' }); } }).catch(()=>{ this.$message({ type: 'error', message: '請(qǐng)求失敗!' }); }) } }, // 提交上傳文件 submitFileForm(){ //判斷是否有文件再上傳 if (this.files.length === 0) { return this.$message.warning('請(qǐng)選取文件后再上傳') } //-- 創(chuàng)建新的數(shù)據(jù)對(duì)象 --> let formData = new FormData(); //-- 將上傳的文件放到數(shù)據(jù)對(duì)象中 --> this.files.forEach((file) =>{ formData.append('files',file.raw) }) //拿到文章id var articleid=store.state.articleMsg.row.id formData.append('articleid',articleid) this.$store.dispatch('fileManage/uploadFile',formData) .then(res => { if(res.succeeded){ this.$message.success('上傳成功!'); this.fileList=[] this.getFiles() }else{ this.$message.error('上傳失敗'); } }) .catch(error => { this.$message.error('上傳失??!'); }); this.dialogVisible=false } } } </script>
總結(jié)
到此這篇關(guān)于vue項(xiàng)目中實(shí)現(xiàn)多文件上傳功能的文章就介紹到這了,更多相關(guān)vue多文件上傳內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue中動(dòng)態(tài)Class實(shí)戰(zhàn)示例
這篇文章主要為大家介紹了Vue中動(dòng)態(tài)Class的實(shí)戰(zhàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11vue+element-ui JYAdmin后臺(tái)管理系統(tǒng)模板解析
這篇文章主要介紹了vue+element-ui JYAdmin后臺(tái)管理系統(tǒng)模板解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07深入理解Vue父子組件生命周期執(zhí)行順序及鉤子函數(shù)
本文通過(guò)實(shí)例代碼給大家介紹了Vue父子組件生命周期執(zhí)行順序及鉤子函數(shù)的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-08-08Vue resource中的GET與POST請(qǐng)求的實(shí)例代碼
本篇文章主要介紹了Vue resource中的GET與POST請(qǐng)求的實(shí)例代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-07-07vue v-for循環(huán)重復(fù)數(shù)據(jù)無(wú)法添加問(wèn)題解決方法【加track-by=''索引''】
這篇文章主要介紹了vue v-for循環(huán)重復(fù)數(shù)據(jù)無(wú)法添加問(wèn)題解決方法,結(jié)合實(shí)例形式分析了vue.js通過(guò)在v-for循環(huán)中添加track-by='索引'解決重復(fù)數(shù)據(jù)無(wú)法添加問(wèn)題相關(guān)操作技巧,需要的朋友可以參考下2019-03-03