实现申请一次上传多文件
前段代码:
`<div id="app"> <el-upload class="upload-demo" ref="upload" action="#" //必选参数,上传的地址 :on-change="onChange" //上传文件扭转时触发钩子 --管制文件组 :on-remove="handleRemove" //文件列表删除时触发钩子 --管制文件组 multiple //是否反对多选文件 :on-exceed="handleExceed" //文件超出个数限度时的钩子 accept=".pdf" //上传文件格式 :limit="5" //上传限度 :file-list="fileList" //上传的文件列表 :auto-upload="false"//是否在选取文件后立刻进行上传 show-file-list> <el-button slot="trigger" size="small" type="primary">选取文件</el-button> <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传到服务器</el-button> <div slot="tip" class="el-upload__tip">只能上传pdf文件</div> </el-upload> //上传显示进度条 <div v-show="progressFlag" class="head-img"> <el-progress :text-inside="true" :stroke-width="14" :percentage="progressPercent" status="success"></el-progress> </div> </div>`
``<script> new Vue({ el: "#app", data() { return { fileList: [],//贮存多文件 progressFlag: false,//进度条初始值暗藏 progressPercent: 0//进度条初始值 }; }, methods: { //上传函数 submitUpload(file) { //重新命名 不便setTimeout函数 --因为setTimeout函数在vue外部中有效 var that = this; that.$refs.upload.submit(); //判断上传文件数量 if (this.fileList.length == 0) { that.$message({ message: '请抉择导入的文件', type: 'warning', duration:'2000'--显示工夫 }); }else{ //创立FormData();次要用于发送表单数据 let paramFormData = new FormData(); //遍历 fileList that.fileList.forEach(file => { paramFormData.append("files", file.raw); paramFormData.append("fileNames", file.name); }); //批改progressFlag值 that.progressFlag = true; //控制台打印文件信息 console.log(param.getAll("files")); //axios 发出请求 axios({ url: "你上传的URL", method: 'post', data: paramFormData, headers: {'Content-Type': 'multipart/form-data'}, onUploadProgress: progressEvent => { // progressEvent.loaded:已上传文件大小 // progressEvent.total:被上传文件的总大小 //进度条 that.progressPercent = ((progressEvent.loaded / progressEvent.total) * 100) | 0; } }).then(res => { if(res.data == "success" && that.progressPercent === 100){ setTimeout(function() { that.$message({ message: '导入胜利!', type: 'success', duration:'2000' }); that.progressFlag = false; that.progressPercent = 0 that.$refs.upload.clearFiles(); }, 1000); } }).catch(error => { that.progressFlag = false; that.progressPercent = 0 that.$refs.upload.clearFiles(); that.$message({ message: '导入失败!', type: 'error', duration:'2000' }); }) } }, //文件状态扭转时的钩子,增加文件、上传胜利和上传失败时都会被调用 onChange(file, fileList) { this.fileList = fileList; }, handleRemove(file, fileList) { this.fileList = fileList; }, handleExceed(files, fileList) { this.$message.warning( `以后限度抉择 5 个文件` ); } } }) </script>``
后端简略接管代码:
@ResponseBody @RequestMapping("接管URl") //用数组去接管 public String uploadPfd(@RequestParam("files") MultipartFile[] files, HttpServletRequest request) { //do something................. //do something................. //我这里只是简略打印出文件名字 for (int i = 0; i < files.length; i++) { System.out.println(files[i].getOriginalFilename()); } return "success"; }