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 相关文章推荐
$.each与$().each的区别示例介绍
Mar 20 Javascript
JavaScript实现的一个日期格式化函数分享
Dec 06 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
Jan 23 Javascript
javascript实现瀑布流加载图片原理
Feb 02 Javascript
jquery遍历json对象集合详解
May 18 Javascript
bootstrap和jQuery.Gantt的css冲突 如何解决
May 29 Javascript
实例解析angularjs的filter过滤器
Dec 14 Javascript
JavaScript基础之AJAX简单的小demo
Jan 29 Javascript
Ionic2开发环境搭建教程
Aug 20 Javascript
完美实现js拖拽效果 return false用法详解
Jul 28 Javascript
利用js编写网页进度条效果
Oct 08 Javascript
利用jquery如何从json中读取数据追加到html中
Dec 01 jQuery
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 删除记录实现代码
2009/03/12 PHP
上传文件先创建目录 再上传到目录里面去
2010/12/29 PHP
探讨Hessian在PHP中的使用分析
2013/06/13 PHP
解析php中的escape函数
2013/06/29 PHP
php开发工具有哪五款
2015/11/09 PHP
PHP面相对象中的重载与重写
2017/02/13 PHP
PHP消息队列实现及应用详解【队列处理订单系统和配送系统】
2019/05/20 PHP
JavaScript 动态将数字金额转化为中文大写金额
2009/05/14 Javascript
IE6浏览器下resize事件被执行了多次解决方法
2012/12/11 Javascript
jquery文字上下滚动的实现方法
2013/03/22 Javascript
用js实现输入提示(自动完成)的实例代码
2013/06/14 Javascript
JavaScript中的this关键字介绍与使用实例
2013/06/21 Javascript
jquery中ajax使用error调试错误的方法
2015/02/08 Javascript
基于jquery animate操作css样式属性小结
2015/11/27 Javascript
JavaScript必知必会(五) eval 的使用
2016/06/08 Javascript
javascript实现简单的ajax封装示例
2016/12/28 Javascript
模块化react-router配置方法详解
2019/06/03 Javascript
easyUI 实现的后台分页与前台显示功能示例
2020/06/01 Javascript
JS轮播图的实现方法
2020/08/24 Javascript
原生JS生成指定位数的验证码
2020/10/28 Javascript
[48:26]VGJ.S vs infamous Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
python搭建简易服务器分析与实现
2012/12/15 Python
Python基于回溯法子集树模板解决0-1背包问题实例
2017/09/02 Python
python 实现对文件夹中的图像连续重命名方法
2018/10/25 Python
解决python中无法自动补全代码的问题
2018/12/04 Python
python中update的基本使用方法详解
2019/07/17 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
np.random.seed() 的使用详解
2020/01/14 Python
马来西亚领先的在线礼品店:Giftr
2018/08/23 全球购物
名词解释WEB SERVICE,SOAP,UDDI,WSDL,JAXP,JAXM;JSWDL开发包的介绍。
2012/10/27 面试题
仓库管理专业个人的自我评价
2013/12/30 职场文书
环境日宣传活动总结
2014/07/09 职场文书
党员反对四风思想汇报范文
2014/10/25 职场文书
小学教育见习报告
2014/10/31 职场文书
2015年教研员工作总结
2015/05/26 职场文书
2016年秋季开学典礼新闻稿
2015/11/25 职场文书