• 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="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。每个人用的都不一样,方法代码我就不贴了

    如果有什么不明白的可以找我

    点击选择了上传的文件才验证非空,这是一个不好的体验,有哪位大佬有更好的办法,还请不吝赐教,在此谢过!

  • 相关阅读:
    python之mysqldb模块安装
    消失的那3个月__怎么看代码的小结
    四年测试经验总结
    python学习笔记系列----(八)python常用的标准库
    业务逻辑中的测试总结(二)----业务与数据库交互需求的测试分解
    python学习笔记系列----(七)类
    【QUESTION】
    python学习笔记系列----(六)错误和异常
    python学习笔记系列----(五)输入和输出
    Android6.0.1 移植:显示系统(一)--测试framebuffer
  • 原文地址:https://www.cnblogs.com/yifeixue/p/13730891.html
Copyright © 2020-2023  润新知