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 大数据相加的问题
Aug 03 Javascript
js bind 函数 使用闭包保存执行上下文
Dec 26 Javascript
跟我学习javascript的Date对象
Nov 19 Javascript
原生javascript实现匀速运动动画效果
Feb 26 Javascript
基于cssSlidy.js插件实现响应式手机图片轮播效果
Aug 30 Javascript
微信小程序 HTTPS报错整理常见问题及解决方案
Dec 14 Javascript
vue 2.0组件与v-model详解
Mar 27 Javascript
Node.js v8.0.0正式发布!看看带来了哪些主要新特性
Jun 02 Javascript
详解angularjs popup-table 弹出框表格指令
Sep 20 Javascript
JS实现的抛物线运动效果示例
Jan 30 Javascript
ES6对象操作实例详解
May 23 Javascript
JavaScript实现登录窗体
Jun 22 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中的正规表达式(二)
2006/10/09 PHP
PHP sprintf() 函数的应用(定义和用法)
2012/06/29 PHP
ThinkPHP视图查询详解
2014/06/30 PHP
PHP生成短网址的3种方法代码实例
2014/07/08 PHP
php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击
2016/12/23 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
2017/02/17 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
2017/05/03 PHP
JQuery模板插件 jquery.tmpl 动态ajax扩展
2011/11/10 Javascript
window.open关于浏览器拦截问题分析及解决方法
2013/02/05 Javascript
Jquery实现带动画效果的经典二级导航菜单
2013/03/22 Javascript
DIV始终居中的js代码
2014/02/17 Javascript
JavaScript两种跨域技术全面介绍
2014/04/16 Javascript
js图片滚动效果时间可随意设定当鼠标移上去时停止
2014/06/26 Javascript
JavaScript实现大数的运算
2014/11/24 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
js正则表达式匹配数字字母下划线等
2015/04/14 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
2015/09/06 Javascript
详解angular中如何监控dom渲染完毕
2017/01/03 Javascript
捕获未处理的Promise错误方法
2017/10/13 Javascript
React+Webpack快速上手指南(小结)
2018/08/15 Javascript
jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】
2019/06/06 jQuery
JavaScript实现点击图片换背景
2020/11/20 Javascript
[55:02]2014 DOTA2国际邀请赛中国区预选赛 HGT VS Orenda
2014/05/21 DOTA
Python实现判断给定列表是否有重复元素的方法
2018/04/11 Python
Python引用计数操作示例
2018/08/23 Python
Python3实现腾讯云OCR识别
2018/11/27 Python
Python_查看sqlite3表结构,查询语句的示例代码
2019/07/17 Python
浅析使用Python搭建http服务器
2019/10/27 Python
简历里的自我评价范文
2014/02/24 职场文书
企业文化理念标语
2014/06/10 职场文书
2014年入党积极分子党校培训心得体会
2014/07/08 职场文书
班级课外活动总结
2014/07/09 职场文书
2019个人半年工作总结
2019/06/21 职场文书
Redis数据结构之链表与字典的使用
2021/05/11 Redis
解决SpringBoot跨域的三种方式
2021/06/26 Java/Android
UNION CREATIVE《Re:从零开始的异世界生活》雷姆手办
2022/03/20 日漫