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中setAttribute用法介绍
Jul 20 Javascript
Javascript字符串浏览器兼容问题分析
Dec 01 Javascript
js中的事件捕捉模型与冒泡模型实例分析
Jan 10 Javascript
深入学习Bootstrap表单
Dec 13 Javascript
javascript动画系列之模拟滚动条
Dec 13 Javascript
微信小程序 实例开发总结
Apr 26 Javascript
详解angular ui-grid之过滤器设置
Jun 07 Javascript
mac中利用NVM管理不同node版本的方法详解
Nov 08 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
Apr 29 Javascript
在VUE中实现文件下载并判断状态的方法
Nov 08 Javascript
AJAX实现省市县三级联动效果
Oct 16 Javascript
js作用域及作用域链工作引擎
Jul 07 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实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
用jscript实现新建和保存一个word文档
2007/06/15 Javascript
JavaScript 高级篇之闭包、模拟类,继承(五)
2012/04/07 Javascript
javascript相等运算符与等同运算符详细介绍
2013/11/09 Javascript
JavaScript的Polymer框架中dom-repeat与VM的相关操作
2015/07/29 Javascript
Web开发必知Javascript技巧大全
2016/02/23 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
JavaScript事件学习小结(三)js事件对象
2016/06/09 Javascript
JQuery学习总结【一】
2016/12/01 Javascript
JS定时器用法分析【时钟与菜单中的应用】
2016/12/21 Javascript
详解如何在NodeJS项目中优雅的使用ES6
2017/04/22 NodeJs
Bootstrap Table 在指定列中添加下拉框控件并获取所选值
2017/07/31 Javascript
JavaScript实现二叉树的先序、中序及后序遍历方法详解
2017/10/26 Javascript
使用vue实现各类弹出框组件
2019/07/03 Javascript
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
pyqt5的QWebEngineView 使用模板的方法
2018/08/18 Python
python中的不可变数据类型与可变数据类型详解
2018/09/16 Python
python程序中的线程操作 concurrent模块使用详解
2019/09/23 Python
Python日志syslog使用原理详解
2020/02/18 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
2020/04/17 Python
python图片合成的示例
2020/11/09 Python
css3 线性渐变和径向渐变示例附图
2014/04/08 HTML / CSS
中国首家奢侈品O2O网购平台:第五大道奢侈品网
2017/12/14 全球购物
美国开幕式潮店:Opening Ceremony
2018/02/10 全球购物
SportsDirect.com马来西亚:英国第一体育零售商
2018/11/21 全球购物
Coccinelle官网:意大利的著名皮具品牌
2019/05/15 全球购物
卫校中专生的自我评价
2014/01/15 职场文书
写自荐信三大法宝
2014/01/24 职场文书
幼儿园教师国培感言
2014/02/02 职场文书
测量工程专业求职信
2014/02/24 职场文书
还款承诺书范文
2014/05/20 职场文书
选秀节目策划方案
2014/06/06 职场文书
高中同学会活动方案
2014/08/14 职场文书
2015年社区党务工作总结
2015/04/21 职场文书
tensorflow学习笔记之tfrecord文件的生成与读取
2021/03/31 Python
SQL Server删除表中的重复数据
2022/05/25 SQL Server