IE9 elementUI文件上传的问题解决


Posted in Javascript onOctober 17, 2018

问题: IE9中无法使用FormData

思路

  • 基于上面的问题,需要使用form表单上传文件
  • form表单上传会引起页面的刷新,因此需要动态添加一个iframe来避免页面刷新
  • from表单上传之后需要调用回调,此时需要监听iframe的onload事件

  • 文件上传之后的返回值 Content-Type值不能是application/json 这会导致IE去解析返回结果,最终调用文件的保存或者打开,此处需要与后端协商将Content-Type改为text/plain
  • 如果需要图片回显,回显的图片路径中有有query参数,如果有多个参数会出现&,但是返回结果显示在iframe中所以&会被当做HTML解析为&所以回显之前需要将此处转换回来

问题解决

项目使用VUE编写,UI是ElementUI,但是Element官方明确了upload方面是不支持IE9的,看源码的意思是已经搁置了iframe上传的后续开发

改用vue-upload-component 作者对IE9专门做了兼容,就是使用起来理解成本有点儿高

如何触发上传

通过ref获取upload实例,在添加文件时 激活上传

this.$refs.upload.active = true

如何判断当前上传的状态(添加,更新,删除,上传成功,上传失败)

每次上传的状态变化时 都会调用@input-file绑定的回调,形参是newFile, oldFile,通过新旧文件的对比来得到当前的状态,感觉有点儿反策略模式的意思,自己通过元状态的组合来得到当前状态,习惯的话觉得还是挺有意思的

inputFile(newFile, oldFile) {
 // 旧文件活跃 新文件不活跃 此时上传过程完成
 if (newFile && oldFile && !newFile.active && oldFile.active) {
  this.$refs.upload.active = false
  // 获得相应数据
  let res = '{}'
  // 此处判断相对简单,可以参考jquery.form.js中做的判断
  if (/<pre/.test(newFile.response)) {
   res = />(.*)</.exec(newFile.response)[1]
  }
  res = JSON.parse(res)
  if (res.code !== 200) {
   if (res.code === 402) {
    this.$route.push('/login')
    return
   }
   Message.error(res.message)
  } else {
   Message.success('上传成功')
   // 回显图片
   this.upload.url = res.data.url.replace(/&/g, '&')
  }
  if (newFile.xhr) {
   // 获得响应状态码
   console.log('status', newFile.xhr.status)
  }
 }
 // 添加文件
 if (newFile && !oldFile) {
  this.$refs['upload' + this.index].active = true
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 数组运用实现代码
Apr 13 Javascript
jQuery maxlength文本字数限制插件
Apr 16 Javascript
sogou地图API用法实例教程
Sep 11 Javascript
JavaScript的各种常见函数定义方法
Sep 16 Javascript
浅谈jQuery中setInterval()方法
Jul 07 Javascript
jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
Dec 03 Javascript
jQuery基于正则表达式的表单验证功能示例
Jan 21 Javascript
Vue.js tab实现选项卡切换
May 16 Javascript
jQuery Form插件使用详解_动力节点Java学院整理
Jul 17 jQuery
jQuery 筛选器简单操作示例
Oct 02 jQuery
element-ui 远程搜索组件el-select在项目中组件化的实现代码
Dec 04 Javascript
js实现炫酷光感效果
Sep 05 Javascript
vue src动态加载请求获取图片的方法
Oct 17 #Javascript
node实现分片下载的示例代码
Oct 17 #Javascript
在小程序开发中使用npm的方法
Oct 17 #Javascript
浅谈HTTP 缓存的那些事儿
Oct 17 #Javascript
使用angular-cli webpack创建多个包的方法
Oct 16 #Javascript
element-ui的回调函数Events的用法详解
Oct 16 #Javascript
基于vue-upload-component封装一个图片上传组件的示例
Oct 16 #Javascript
You might like
php相当简单的分页类
2008/10/02 PHP
php使用ereg验证文件上传的方法
2014/12/16 PHP
YII框架模块化处理操作示例
2019/04/26 PHP
jQuery 幻灯片插件(带缩略图功能)
2011/01/24 Javascript
window.open以post方式将内容提交到新窗口
2012/12/26 Javascript
JS实现鼠标经过好友列表中的好友头像时显示资料卡的效果
2014/07/02 Javascript
浅谈JavaScript中Date(日期对象),Math对象
2015/02/05 Javascript
js实现当前输入框高亮显示的方法
2015/08/19 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
2015/11/24 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
jQuery插件imgAreaSelect基础讲解
2017/05/26 jQuery
基于Vue过渡状态实例讲解
2017/09/14 Javascript
Node.JS中快速扫描端口并发现局域网内的Web服务器地址(80)
2017/09/18 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
2018/05/07 Javascript
.vue文件 加scoped 样式不起作用的解决方法
2018/05/28 Javascript
js+canvas实现简单扫雷小游戏
2021/01/22 Javascript
[05:46]DOTA2英雄梦之声_第18期_陈
2014/06/20 DOTA
详解Python的Django框架中的templates设置
2015/05/11 Python
python函数中return后的语句一定不会执行吗?
2017/07/06 Python
python使用代理ip访问网站的实例
2018/05/07 Python
python实现AES加密与解密
2019/03/28 Python
Django中使用 Closure Table 储存无限分级数据
2019/06/06 Python
Pycharm新建模板默认添加个人信息的实例
2019/07/15 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
python数据预处理 :数据共线性处理详解
2020/02/24 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
2020/03/28 Python
解析Python 偏函数用法全方位实现
2020/06/26 Python
浅析Python中字符串的intern机制
2020/10/03 Python
python Gabor滤波器讲解
2020/10/26 Python
宏碁西班牙官网:Acer西班牙
2021/01/08 全球购物
行政办公室岗位职责
2014/03/18 职场文书
节能减耗标语
2014/06/21 职场文书
工厂门卫的岗位职责
2014/07/27 职场文书
商铺消防安全责任书
2014/07/29 职场文书
韩语专业职业生涯规划范文:成功之路就在我们脚下
2014/09/11 职场文书
公司领导班子对照检查存在问题整改措施
2014/10/02 职场文书