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和JQuery实用代码片段(一)
Apr 07 Javascript
jquery中ajax学习笔记3
Oct 16 Javascript
js导航栏单击事件背景变换示例代码
Jan 13 Javascript
JavaScript实现简单Tip提示框效果
Apr 20 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
Aug 11 Javascript
JavaScript 栈的详解及实例代码
Jan 22 Javascript
在layui tab控件中载入外部html页面的方法
Sep 04 Javascript
微信小程序webSocket的使用方法
Feb 20 Javascript
js实现小球在页面规定的区域运动
Jun 16 Javascript
JavaScript实现手风琴效果
Feb 18 Javascript
如何用JavaScipt测网速
May 09 Javascript
js基于div丝滑实现贝塞尔曲线
Sep 23 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支付宝在线支付接口开发教程
2016/09/19 PHP
JQuery中关于jquery.js与jquery.min.js的比较探讨
2013/05/15 Javascript
Jquery attr(&quot;checked&quot;) 返回checked或undefined 获取选中失效
2013/10/10 Javascript
ZeroClipboard插件实现多浏览器复制功能(支持firefox、chrome、ie6)
2014/08/30 Javascript
DOM 事件流详解
2015/01/20 Javascript
js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
2015/11/09 Javascript
Bootstrap模块dropdown实现下拉框响应
2016/05/22 Javascript
浅析JavaScript回调函数应用
2016/05/22 Javascript
修改js confirm alert 提示框文字的简单实例
2016/06/10 Javascript
js实现随机抽选效果、随机抽选红色球效果
2017/01/13 Javascript
jQuery选择器_动力节点Java学院整理
2017/07/05 jQuery
vue中post请求以a=a&amp;b=b 的格式写遇到的问题
2018/04/27 Javascript
微信小程序自定义键盘 内部虚拟支付
2018/12/20 Javascript
深入理解vue-class-component源码阅读
2019/02/18 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
Vue.js组件props数据验证实现详解
2019/10/19 Javascript
Element-Ui组件 NavMenu 导航菜单的具体使用
2019/10/24 Javascript
Python数组定义方法
2016/04/13 Python
python中matplotlib的颜色及线条控制的示例
2018/03/16 Python
python实现字符串中字符分类及个数统计
2018/09/28 Python
python+opencv实现霍夫变换检测直线
2020/10/23 Python
详解Python3序列赋值、序列解包
2019/05/14 Python
Pytorch实现LSTM和GRU示例
2020/01/14 Python
Pandas中DataFrame基本函数整理(小结)
2020/07/20 Python
详解如何将 Canvas 绘制过程转为视频
2021/01/25 HTML / CSS
法国在线药房:DoctiPharma
2020/10/21 全球购物
迟到检讨书5000字
2014/01/31 职场文书
毕业论文评语大全
2014/04/29 职场文书
法定代表人授权委托书
2014/09/19 职场文书
护理见习报告范文
2014/11/03 职场文书
2014年社区综治工作总结
2014/11/17 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
Python内置数据结构列表与元组示例详解
2021/08/04 Python
Apache POI的基本使用详解
2021/11/07 Servers
CentOS7和8下安装Maven3.8.4
2022/04/07 Servers