前言:工作中用到 vue+element ui 的前端框架,使用到上传文件,则想着封装为组件,达到复用,可扩展。转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9630868.html

网站地址:我的个人vue+element ui demo网站

github地址:yuleGH github

组件代码如下:

  1. <div id="uploadComponent" style="display: none">
  2. <el-upload ref="upload" class="upload-demo" :action="action" :data="data" :file-list="fileList"
  3. show-file-list :limit="limit" :accept="accept" :disabled="disabled" :auto-upload="true"
  4. :on-error="handleError" :on-success="handleSuccess" :on-remove="handleRemove" :on-exceed="handleExceed" :on-preview="handlePreview"
  5. :before-upload="beforeAvatarUpload" :before-remove="beforeRemove">
  6. <el-button size="small" type="primary">选择文件</el-button>
  7. </el-upload>
  8. </div>

以及:

  1. <script type="text/javascript">
  2. var uploadComponent = {
  3. template : document.getElementById("uploadComponent").innerHTML,
  4. data : function(){
  5. return {
  6. action : this.uploadUrl,
  7. data : {},//向后台传额外参数
  8. limit : this.fileLimit,
  9. disabled : this.uploadDisabled,
  10.  
  11. //接收文件类型,从数据字典取值
  12. accept : ".jpg,.pdf",
  13. //文件大小,从数据字典取值
  14. uploadMaxSize : 1024*1024
  15. }
  16. },
  17. props: {
  18. /**
  19. * 默认显示的附件
  20. */
  21. attachmentList : {
  22. type: Array,
  23. default : function(){
  24. return [];
  25. }
  26. },
  27. /**
  28. * 初始化上传组件,是否禁用
  29. */
  30. uploadDisabled : {
  31. type: Boolean,
  32. default : false
  33. },
  34. /**
  35. * 上传地址
  36. */
  37. uploadUrl : {
  38. type : String,
  39. required : true
  40. },
  41. /**
  42. * 文件 最大允许上传个数
  43. */
  44. fileLimit : {
  45. type : Number,
  46. default : 5
  47. }
  48. },
  49. computed: {
  50. //默认文件列表
  51. fileList : {
  52. get : function(){
  53. if(!this.attachmentList){
  54. return [];
  55. }
  56. //可能会根据后台字段做一些特殊转换
  57. return this.attachmentList;
  58. },
  59. set : function(){
  60. console.log("set");
  61. }
  62. }
  63. },
  64. watch:{
  65.  
  66. },
  67. created:function () {
  68. },
  69. mounted : function(){
  70. var _self = this;
  71. this.$nextTick(function () {
  72. })
  73. },
  74. methods : {
  75. /**
  76. * 获取当前所有的附件
  77. * @return {Array}
  78. */
  79. getUploadFilesList : function(){
  80. var uploadFiles = this.$refs.upload.uploadFiles;
  81. return uploadFiles;
  82. },
  83. /**
  84. * 设置组件可用
  85. */
  86. setEditable : function(){
  87. this.disabled = false;
  88. },
  89. /**
  90. * 设置组件不可用
  91. */
  92. setDisEditable : function(){
  93. this.disabled = true;
  94. },
  95.  
  96. /**
  97. * 上传失败
  98. * @param err
  99. * @param file
  100. * @param fileList
  101. */
  102. handleError : function(err, file, fileList){
  103. showAlert.call(this, '上传失败,系统未知错误!错误码为【500】', iconConstants.ERROR);
  104. },
  105. /**
  106. * 上传成功
  107. * @param response
  108. * @param file
  109. * @param fileList
  110. */
  111. handleSuccess : function(response, file, fileList){
  112. if(response.id){
  113. //成功
  114. showAlert.call(this, "上传成功!", iconConstants.SUCCESSAUTO);
  115. }else{
  116. //出错
  117. showAlert.call(this, "上传失败!" + response.buinessMsg, iconConstants.ERROR);
  118.  
  119. //删除该文件
  120. var i = this.getFile(file, fileList);
  121. fileList.splice(fileList.indexOf(i), 1);
  122. }
  123. },
  124. getFile: function (file, fileList) {
  125. fileList.forEach((x, i)=>{
  126. if(x.uid === file.uid){
  127. return x;
  128. }
  129. });
  130.  
  131. return null;
  132. },
  133. /**
  134. * 移除文件之前
  135. * 删除文件之前的钩子,参数为上传的文件和文件列表,若返回 false 或者返回 Promise 且被 reject,则停止上传。
  136. * @param file
  137. * @param fileList
  138. */
  139. beforeRemove : function(file, fileList){
  140. if(file){
  141. var _self = this;
  142. var result = showConfirmNoCancelCallBack.call(_self, "是否删除(" + file.name + ")?", iconConstants.QUESTION, function(){
  143. showAlert.call(_self, "ajax访问后台删除,操作成功!", iconConstants.SUCCESSAUTO);
  144. });
  145. return result;
  146. }
  147. },
  148. /**
  149. * 删除文件
  150. * @param file
  151. * @param fileList
  152. */
  153. handleRemove : function(file, fileList){
  154.  
  155. },
  156. /**
  157. * 文件超出个数限制时的钩子
  158. * @param files
  159. * @param fileList
  160. */
  161. handleExceed : function(files, fileList){
  162. showAlert.call(this, "当前限制选择 "+this.limit+" 个文件,本次选择了 "+files.length+" 个文件,共选择了 "+files.length + fileList.length+" 个文件", iconConstants.WARNING);
  163. },
  164. /**
  165. * 点击文件列表中已上传的文件时的钩子
  166. * @param file
  167. */
  168. handlePreview : function(file){
  169. console.log(file);
  170. showAlert.call(this, "访问后台下载,操作成功!", iconConstants.SUCCESSAUTO);
  171. },
  172. /**
  173. * 校验文件
  174. * 上传文件之前的钩子,参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则停止上传。
  175. * @param file
  176. * @return {boolean}
  177. */
  178. beforeAvatarUpload: function(file){
  179.  
  180. if (file.size > this.uploadMaxSize) {
  181. showAlert.call(this, "您文件大小不合法", iconConstants.ERRORAUTO);
  182. return false;
  183. }
  184.  
  185. if(file.name.indexOf(",") > 0){
  186. //您的文件名不合法,不能包含逗号,请检查后重新上传!
  187. showAlert.call(this, "您的文件名不合法,不能包含逗号,请检查后重新上传!", iconConstants.ERRORAUTO);
  188. return false;
  189. }
  190.  
  191. return true;
  192. }
  193. }
  194. };
  195. </script>

完。整体代码见 GitHub,喜欢就star,不定时更新。

转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9630868.html

vue+element ui 的上传文件使用组件的更多相关文章

  1. 封装Vue Element的upload上传组件

    本来昨天就想分享封装的这个upload组件,结果刚写了两句话,就被边上的同事给偷窥上了,于是在我全神贯注地写分享的时候他就神不知鬼不觉地突然移动到我身边,腆着脸问我在干啥呢.卧槽你妈,当场就把我吓了一 ...

  2. 基于element UI 的上传插件

    为了不再重复的上传文件,做了一个统一选择文件和上传文件的 基于 element UI :http://element-cn.eleme.io 前端实现文件下载和拖拽上传 演示 用法 <uploa ...

  3. easy ui 异步上传文件,跨域

    easy ui 跨域上传文件,代码如下: 1.html代码:(这段代码是个win窗体,我在点击上传图片按钮然后弹出一个上传图片的窗体,选择图片再进行上传,这样在form提交时,提交的参数会少一点.) ...

  4. Ui自动化测试上传文件方法都在这里了

    前言 实施UI自动化测试的时候,经常会遇见上传文件的操作,那么对于上传文件你知道几种方法呢?今天我们就总结一下几种常用的上传文件的方法,并分析一下每个方法的优点和缺点以及哪种方法效率,稳定性更高 被测 ...

  5. vue form表单上传文件

    <script src="https://cdn.staticfile.org/vue-resource/1.5.1/vue-resource.min.js">< ...

  6. vue element多图上传

    最近项目需要优化图片上传,由单个改成多个,这里记录下自己遇到的一些问题和解决方法 本以为是传全部图片到后台,然后统一处理,但后面在Network中发现upload组件其实还是单一上传,那只能依照它的方 ...

  7. 【要什么自行车】ASP.NET MVC4笔记02:上传文件 uploadify 组件使用

    参考:http://www.cnblogs.com/luotaoyeah/p/3321070.html 1.下载 uploadify 组件,copy至 Content文件夹 <link href ...

  8. Angular4 后台管理系统搭建(10) - 做一个通用的可跨域上传文件的组件

    写的很慢,不知不觉这是第十篇了.但是我其他事情太多,只能抽空写下.现在angular4或angular2流行的上传方式是ng2-file-upload.它的功能很强大.但是我没有配置成可以跨域上传的. ...

  9. element ui图片上传方法

    <!--商品图片--> <template v-slot:product_cover> <el-upload list-type="picture-card&q ...

随机推荐

  1. Android Studio - Unable to create Debug Bridge: Unable to start adb server: adb server version (32) doesn't match this client (40)

    错误提示:Unable to create Debug Bridge: Unable to start adb server: adb server version (32) doesn't matc ...

  2. 1000. Minimum Cost to Merge Stones

    There are N piles of stones arranged in a row.  The i-th pile has stones[i] stones. A move consists ...

  3. 「BZOJ1095」[ZJOI2007] Hide 捉迷藏

    题目描述 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特,由N个屋子和N-1条双向走廊组成,这N-1条 ...

  4. 二,windows下安装memcached服务

    window下安装memcached服务的流程如下: 1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached 2. 在终端(也即cmd命令界面)下输入 ‘c ...

  5. $_ENV和$GLOBALS预定义变量

    1,$_ENV该全局数组可以获取环境变量,在php5.3中默认禁用,但是可以在php.ini中启用. variables_order="EGPCS" 2,$GLOBALS一个包含了 ...

  6. ZZNU 2076(退役学长最后的神功 zz题)

    题目链接:http://acm.zznu.edu.cn/problem.php?pid=2076 输入一个T表示有T个样例每组实例一个整数n(0〈n〈1000接下来输入2*n个数字,代表一个2*n的矩 ...

  7. cobbler 自定义安装系统

    1.自定义安装系统(根据mac地址)--name=定义名称--mac=客户端的mac地址--ip-address=需求的ip--subnet=掩码 --gateway=网关--interface=网口 ...

  8. iis 如何设置http访问转向https

    把网站设置成https后,发现在浏览器输入域名后,并不能所期望的看到成功访问页面,在输入如:http://www.alipay.com后浏览器自动导航到https://www.alipay.com. ...

  9. ViewPage最全解析

    简单说明: ViewPager是android扩展包v4包中的类,直接继承了ViewGroup类,和LinearLayout等布局一样,都是一个容器,需要在里面添加我们想要显示的内容. 一.在xml中 ...

  10. IntelliJ IDEA(Community版本)的下载、安装和WordCount的初步使用(本地模式和集群模式)

    不多说,直接上干货! 对于初学者来说,建议你先玩玩这个免费的社区版,但是,一段时间,还是去玩专业版吧,这个很简单哈,学聪明点,去搞到途径激活!可以看我的博客. 包括: IntelliJ IDEA(Co ...