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 相关文章推荐
解决3.01版的jquery.form.js中文乱码问题的解决方法
Mar 08 Javascript
解析javascript系统错误:-1072896658的解决办法
Jul 08 Javascript
JS日期加减,日期运算代码
Nov 05 Javascript
jquery实现横向图片轮播特效代码分享
Nov 19 Javascript
搞定immutable.js详细说明
May 02 Javascript
jQuery插件版本冲突的处理方法分析
Jan 16 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
Apr 21 jQuery
JS实现无缝循环marquee滚动效果
May 22 Javascript
微信小程序之页面跳转和参数传递的实现
Sep 29 Javascript
vue组件开发之用户无限添加自定义填写表单的方法
Aug 28 Javascript
JavaScript从原型到原型链深入理解
Jun 03 Javascript
js实现盒子移动动画效果
Aug 09 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与SQL注入攻击[二]
2007/04/17 PHP
php switch语句多个值匹配同一代码块的实现
2014/03/03 PHP
YII模块实现绑定二级域名的方法
2014/07/09 PHP
[原创]smarty简单模板变量输出方法
2016/07/09 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
2017/05/05 PHP
PHP中number_format()函数的用法讲解
2019/04/08 PHP
js 数组的for循环到底应该怎么写?
2010/05/31 Javascript
js数组循环遍历数组内所有元素的方法
2014/01/18 Javascript
avalonjs实现仿微博的图片拖动特效
2015/05/06 Javascript
$.extend 的一个小问题
2015/06/18 Javascript
jquery合并表格中相同文本的相邻单元格
2015/07/17 Javascript
NodeJS创建最简单的HTTP服务器
2017/05/15 NodeJs
基于zepto.js实现手机相册功能
2017/07/11 Javascript
JavaScript实现精美个性导航栏筋斗云效果
2017/10/29 Javascript
实例分析JS与Node.js中的事件循环
2017/12/12 Javascript
通过函数作用域和块级作用域看javascript的作用域链
2018/08/05 Javascript
vue组件间的参数传递实例详解
2019/04/26 Javascript
echarts大屏字体自适应的方法步骤
2019/07/12 Javascript
js实现无刷新监听URL的变化示例代码详解
2020/06/03 Javascript
vue脚手架项目创建步骤详解
2021/03/02 Vue.js
Python爬取网易云音乐热门评论
2017/03/31 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
pycharm中成功运行图片的配置教程
2018/10/28 Python
python判断一个对象是否可迭代的例子
2019/07/22 Python
python实现粒子群算法
2020/10/15 Python
HTML5的postMessage的使用手册
2018/12/19 HTML / CSS
英国标准协会商店:BSI Shop
2019/02/25 全球购物
英国豪华家具和家居用品购物网站:Teddy Beau
2020/10/12 全球购物
Deichmann英国:德国鞋类零售商
2021/01/30 全球购物
个人评价范文分享
2014/01/11 职场文书
停电放假通知
2015/04/14 职场文书
户外拓展训练感想
2015/08/07 职场文书
2016暑期校本培训心得体会
2016/01/08 职场文书
建筑工程挂靠协议书
2016/03/23 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书
Html5生成验证码的示例代码
2021/05/10 Javascript