ie9上传图片的兼容性问题

背景:

  • 已有项目兼容ie9浏览器,原本使用antd图片上传ui组件报错,其功能无法正常实现。
  • 即使撇掉ui框架,直接用原生ajax+formdata依然不行,因为ie根本无法获取到input要上传的file对象,也不支持formdata。

解决方案:

  • 使用表单提交,此时项目中要求调用上传接口时要设置header请求头,并且,上传成功后可以在成功回调中做一些操作。
  • 所以,引用jquery.form来实现设置header和回调。代码如下:
<div>
   <img width="100%" src={this.state.imageUrl||"http://tax-school-img.oss-cn-beijing.aliyuncs.com/2018-05-03/1525311589126.png?Expires=1840671579&OSSAccessKeyId=LTAIlteGNiLFLomK&Signature=5LjraX9LEU3Iza2N%2FVRKbvFvGs0%3D"} alt="" className="my_home_all_content_left_img" />
   <div style={{width:"90px"}}>修改头像</div>
   <form id="myForm" method="post" encType="multipart/form-data" target="iframe">
    <input ref="uploadInput" name="file" type="file" accept='image/*'
               onChange={this.onChangeAvatarUploadForIE.bind(this)}
               accept="image/jpg,image/jpeg"
               style={{display:"none"}}
               id="uploadInput"
               autoFocus={false}
     />
     <input ref="fileSubmit" type="submit" style={{display:"none"}}/>
     <label for="uploadInput"
          style={{height:"110px",width:"90px",position:"absolute",top:"0",left:"0",cursor:"pointer",background:"#000",zIndex:"99",opacity:"0"}}>
     </label>
   </form>
</div>

注意:

1.enctype属性设置为:encType="multipart/form-data"

enctype属性

2.label标签必须有。

  • 一般我们会将input隐藏掉,因为其样式不符合设计需求。并通过点击事件触发input的点击。

  • 但这种操作ie浏览器会报错:拒绝访问。
    (ie浏览器的安全机制,必须是用户主动点击才生效)

  • 所以,只能真正手动去点击(不想让人看见的话,可以将透明度设置为0),或者使用现在的label标签。

3.给图片请求接口后加时间戳

  • 比如应用场景是修改头像时,上传一张图片,完成上传后图片切换为最新的。

  • 但是当我刷新页面时,图片又变成了修改之前的那张图片。检查后发现获取头像图片的接口http状态码为304(请求地址不变,取缓存),ie对获取过的接口数据有缓存。

  • 其实,解决这个问题也好办,将请求接口的地址后面增加一个时间戳即可,这样每次调用的接口不同,不会出现取缓存数据的问题。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 28,545评论 1 45
  • 如果不考虑ie9兼容性,实现【上传图片】大致的思路如下: 由于公司是将所有上传的图片都放到【代理服务器】里。所以【...
    kakaguo阅读 6,116评论 1 4
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,462评论 4 61
  • 是不是用国自科代替就可以了?
    对未来充满幻想阅读 184评论 0 0
  • 她梦见他穿着红色新郎服,披着大红盖头,去盖住他的新娘。而新娘并不是她!却又那么近的在她眼前,不知是梦里梦外! 她起...
    谢京豆阅读 219评论 2 0

友情链接更多精彩内容