前言

通过post或者get下载路径,还需要知道下载完成的状态,知道什么时候下载完成。
IE浏览器或者有些手机的浏览器有些图片不显示,因为图片路径不被浏览器识别。

概述

显示图片大家都知道只要用img标签,把url给上路径就可以显示出来了,但是如果是路径是这种

图片在谷歌火狐或者safari显示没有问题,但是在IE上无法正常显示。如果是一png、jpg这种路径的却没有问题。那么怎么来处理这种问题呢?

思考

为什么这种在IE上无法显示?既然能通过路径获取图片的数据
可不可以直接ajax方法拿到文件数据,然后显示到页面或者下载?

获取文件数据

不多说直接上代码

/*** @description 通过请求获取文件 * @param {String} url 请求接口* @param {Object} data 发送的数据*/
getImageUrl(url, data) {return new Promise(resolve => {  // new 一个Promise对象let xmlhttplet formData = new FormData()  // 这里用的是formData包装数据,根据自己项目可以改成普通的json数据传输 用json传输注意转换成字符串  // let data = JSON.stringify(data)if (data) {Object.keys(data).forEach(item => {if (data[item]) {formData.append(item.toString(), data[item])}})}xmlhttp=new XMLHttpRequest()xmlhttp.open("GET", url, true);xmlhttp.responseType = "blob"  // 返回响应数据的类型xmlhttp.onload = function(){if (xmlhttp.status == 200) {let fileUrl = window.URL.createObjectURL(xmlhttp.response)let fileName = decodeURI(xmlhttp.getResponseHeader('content-disposition').split('filename=')[1].replace(/\"/g, ''))  //如果是下载文件需要在header中获取文件名  这里可能提取文件名不能完全符合每个项目,如果获取的不对 通过xmlhttp.getResponseHeader('content-disposition')方法自行正则或者其他方法拿到文件名resolve({fileName,fileUrl,fileBlob: xmlhttp.response})}}xmlhttp.send(formData)   })
}

通过这个方法就可以完成下载一个文件了,并生成一个本地路径 用法:

 const download = (url, data) => {getUrl(url, data).then(file => {  // 这里可以只用file.flieUrl然后将这个赋值给页面的图片就能解决IE不能现在某些特殊路径的图片的问题if (window.navigator.msSaveBlob) { // IE 兼容IE不支持downloadwindow.navigator.msSaveOrOpenBlob(file.fileBlob, file.fileName)return}let elementA = document.createElement("a")document.body.appendChild(elementA)elementA.setAttribute('href', file.fileUrl)   elementA.setAttribute('download', file.fileName)elementA.click()document.body.removeChild(elementA)})
}

这短代码演示的post方法并用FormData包装数据,请求方法和格式可根据自己项目随意修改。

转载于:https://www.cnblogs.com/slongs/p/10001725.html

原生ajax通过post或者get下载文件,或处理IE浏览器因为后缀不能显示图片相关推荐

  1. mac怎么删除下载文件及MAC电脑浏览器如何清除缓存?

    很多用户在浏览器下载了很多文件,可能只打开过一次就再也没有使用过,也不知道怎么删除,等存储空间不够了才想起删除下载文件或者清理浏览器缓存.今天小编就来教大家mac怎么删除下载的文件,以及macbook ...

  2. java 上传图片后没法立马显示出来_SpringMVC多个文件上传及上传后立即显示图片功能...

    多文件上传就是改良一个方法把MultipartFile类换成CommonsMultipartFile类,因为上传多个文件用数组方式的话MultipartFile类不能初始化,它不支持数组 packag ...

  3. JavaScript实战篇 -ajax方式实现js打包下载文件

    一.问题描述 在我们日常开发中,会遇到批量下载方面的问题;如上图所示,我们要批量下载图片,接下来我们就模拟实现这个功能,并将下载文件打包下载; 二.准备工作 2.1 JSZip JSZip 是一个 j ...

  4. Java实现FTP下载文件到客户端(浏览器)

    目录 一.简介 二.maven依赖 三.配置类 四.工具类 4.1.服务器文件名中文处理 4.2.下载文件名中文处理 五.接口验证 一.简介   我在之前的文章(Java实现文件上传和下载)里讲过非F ...

  5. Django下载文件中文乱码 FileResponse 浏览器正确识别文件名和文件大小的简单方法

    起因 工作需要维护一个工单系统,下载文件时如果文件名有中文会导致乱码,并且下载时不显示文件的完整大小,没有进度条 修改 原先接口是这样写的 # view入口 class DownFile(BaseVi ...

  6. 微信公众号下载文件(避开微信浏览器的文件下载方法)

    微信浏览器是屏蔽资源文件下载的,但是微信公众号内如何下载文件呢.只能借助于在其他浏览器打开,也就是跳到其他浏览器进行下载(如图). 具体的逻辑很简单,就是在需要下载的位置比如:是一个单击事件 < ...

  7. java文件下载并添加水印_Java下载文件加文字水印(Excel、PDF、图片)

    一.导出Excel加文字水印 方法:通过实现准备一个带有水印的Excel文件,然后将数据覆盖该文件然后输出. 比如我准备了如下的一个带水印的模板,我起名为water.xlsx(网上有如何给Excel加 ...

  8. vue本地下载文件,解决ie浏览器本地下载文件无反应(已解决);vue-cli2本地下载文件,vue-cli3本地下载文件

    1.vue-cli2+vue 注意:vue-cli2本地文件需要放在静态文件static下 <a href="javascript:void(0);" @click=&quo ...

  9. java安卓浏览器下载文件,JAVA实现文件下载,浏览器端得到数据没反应解决方案

    JAVA实现文件下载,浏览器端得到数据没反应 代码如下 public void doPost(HttpServletRequest request, HttpServletResponse respo ...

最新文章

  1. 2022-2028年中国动力电池行业深度调研及投资前景预测报告
  2. Cacti Weathermap添加主机在线状态图示检测
  3. mysql3.0数据库修复_mysql3.0监控mysql数据库
  4. 汉字的理据与造字取向
  5. python用于什么-Python用于哪些领域
  6. 【线性规划与网络流24题】孤岛营救问题 分层图
  7. 用WPF开发Mapxtreme-- 在.net 4.0 下面开发WPF mapxtreme 程序
  8. 关于数据库与LoaderManager的联合使用,节流???。。。。。
  9. Greenplum-概念篇
  10. java的printf语法_Java中printf的用法总结
  11. 如何训练自己的编程思路
  12. python获取APP夸克答题助手答案
  13. linux飞信机器人,在Nagios使用飞信机器人发送警报
  14. 登陆apple pay显示无法登录服务器,apple pay无法添加卡怎么办?未能连接到apple pay的解决方法...
  15. 网站卡死服务器2008,winserver2008r2频繁卡死?
  16. 搭档之家:牛市来了!阿里云“临牛受命”,接到多家券商扩容需求
  17. mysql中explain执行结果各个字段的意思
  18. 低估价值选股策略(含源代码)
  19. 串口、网口等自定义通信协议的问题
  20. #Python #2022卡塔尔世界杯 #FIFA World Cup Qatar 2022 # 机器学习 #数据分析 用Python预测世界杯决赛

热门文章

  1. 转:一个网页图表的demon网站
  2. 通过NSString初始化OC类
  3. 汇编语言:第二章 寄存器
  4. 一个不错的网络基础知识网站
  5. 时间复杂度O(1) O(n) O(logn) O(nlogn)是什么意思?
  6. Springboot05整合FastJson优化输出
  7. 循环的中断操作(C#基础回顾03)
  8. tf.graph函数
  9. android获取各种系统路径的方法
  10. javaweb servlet