Element+vue.js 实现文件模板下载,和Upload 上传文件带参数
一开始自己也是第一次用Element+vue.js 做上传文件功能,走了点弯路。经过功能实现后整合了一下,给需要的朋友们参考一下。
功能页面如下:
下面是此功能的完整代码:
HTML:(样式由于是文件引用,这里没有给,亲们自己有自己喜欢的CSS)
1 <div id="uploadFile"> 2 3 <input type="hidden" id="hidSid" value="@ViewBag.sid" /> 4 5 <div> 6 7 <span style="color:red">*</span><span class="w60">参数</span> 8 </div> 9 10 <div style="margin-left:3px;"> 11 <el-input v-cloak class="w160" v-model="searchData.parameter"></el-input> 12 </div> 13 14 <div class="inline-block" style="line-height: 38px;"> 15 <el-upload class="upload-demo" 16 style="float:left;" 17 v-bind:action="uploadPath" 18 v-bind:auto-upload="true" 19 v-bind:before-upload="beforeUpload" 20 v-bind:on-success="uploadSuccess" 21 v-bind:on-error="uploadFail" 22 v-bind:data="paramsData" 23 v-bind:limit="1" 24 v-bind:show-file-list="false" 25 v-bind:file-list="fileList"> 26 27 <el-button v-cloak style="width:160px;" type="warning">上传文件</el-button> 28 </el-upload> 29 30 <el-button type="text" style="margin-left:20px;padding-top:18px;" v-on:click="downloadTemplate">文件模板下载</el-button> 31 </div> 32 33 </div>
解释说明:
action 必选参数,上传的地址 string
auto-upload 是否在选取文件后立即进行上传 boolean
before-upload 上传文件之前的钩子,参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则停止上传
on-success 文件上传成功时的钩子 function(response, file, fileList)
on-error 文件上传失败时的钩子 function(err, file, fileList)
data 上传时附带的额外参数 object
limit 最大允许上传个数 number
show-file-list 是否显示已上传文件列表 boolean
file-list 上传的文件列表, 例如: [{name: 'food.jpg', url: 'https://xxx.cdn.com/xxx.jpg'}]
Script:这里用的是vue.js
1 var vueIncomePay = new Vue({ 2 el: '#uploadFile', 3 data: { 4 sid: document.getElementById('hidSid').value, 5 //上传Excel 6 uploadPath: '/FM/Account/UploadBathCheck?sid=' + document.getElementById('hidSid').value, 7 //上传文件格式 8 fileTypeList: ['xls', 'xlsx'], 9 //上传文件大小 2M 10 fileSize: 2, 11 fileList: [], 12 }, 13 searchData: { 14 IsDetail: false, 15 //参数 16 parameter:'', 17 } 18 }, 19 methods: { 20 21 beforeUpload: function (file) { 22 var __self = this; 23 var result = true; 24 25 //参数不能为空验证 26 if (__self.searchData.parameter == "") { 27 __self.$message({ message: '请输入参数!', type: 'warning' }); 28 return false; 29 } 30 var type = file.name.substring(file.name.indexOf('.') + 1, file.name.length).toLowerCase(); 31 var isExcel = __self.fileTypeList.indexOf(type) != -1; 32 var isLtSize = file.size / 1024 / 1024 < __self.fileSize; 33 34 if (!isExcel) { 35 __self.$message.error('上传文件只能是 ' + __self.fileTypeList.join(',') + ' 格式'); 36 } 37 if (!isLtSize) { 38 __self.$message.error('上传文件大小不能超过 ' + __self.fileSize + 'M'); 39 } 40 result = isExcel && isLtSize; 41 __self.reMsg = ''; 42 __self.errorList = []; 43 if (result) { 44 __self.loading = __self.$loading({ 45 lock: true, 46 text: '导入数据中...', 47 spinner: 'el-icon-loading', 48 background: 'rgba(0, 0, 0, 0.7)' 49 }); 50 } 51 return result; 52 }, 53 54 uploadSuccess: function (data, file, fileList) { 55 var __self = this; 56 __self.resultMsg = ''; 57 __self.loading.close(); 58 if (data == null) { 59 __self.$message.error('导入失败'); 60 return; 61 } else { 62 console.log(JSON.stringify(data)); 63 __self.fileList = []; 64 if (data.isSucc) { 65 __self.$message.success(data.message); 66 } else { 67 __self.$message.error(data.message); 68 } 69 console.log(__self.errorList); 70 } 71 }, 72 73 uploadFail: function (err) { 74 this.$message.error('导入失败'); 75 console.log(JSON.stringify(err)); 76 return; 77 }, 78 }, 79 80 //被带入到后台的参数 81 computed: { 82 paramsData: function () { 83 var __self = this; 84 var params = { 85 parameter: __self.searchData.parameter, 86 }; 87 return params; 88 } 89 }
至于后台代码,本人是MVC。每个人用的都不一样,方法代码我就不贴了
如果有什么不明白的可以找我
点击选择了上传的文件才验证非空,这是一个不好的体验,有哪位大佬有更好的办法,还请不吝赐教,在此谢过!
博学而笃志,切问而近思!