传统上,客户端将依靠浏览器来处理从服务器下载文件。然而,这种方法需要打开一个新的浏览器窗口,iframe或任何其他类型的不友好和黑客行为。为下载请求添加额外的头信息也很困难。更好的解决方案是使用HTML5 File API以及XMLHttpRequest或请求库。

File API允许您在浏览器中创建,加载和操作文件。我们可以使用a Blob 创建一个内存文件:

const blob = new Blob(['lorem ipsum'],{type:'text / plain'});

通过一些额外的工作,我们可以将这个文件下载到我们的文件系统中:

index.html

<DIV>

<a href='#' id='trigger'>创建并下载Lorem Ipsum </a>

</ DIV>

main.js

const trigger = document.querySelector('#trigger');

trigger.addEventListener('click',()=> {

const blob = new Blob(['lorem ipsum'],{type:'text / plain'});

blob.name ='lorem.txt'

const reader = new FileReader();

reader.onload = e => {

const anchor = document.createElement('a');

anchor.style.display ='none';

anchor.href = e.target.result;

anchor.download = blob.name;

anchor.click();

};

reader.readAsDataURL(BLOB);

});

这是一个工作示例。当你点击trigger时,我们创建一个抛弃锚点元素,它接收一个下载属性,其中包含我们想要保存的文件名以及由此生成的URL,

readAsDataURL()它实际上表示我们的数据为base64编码的字符串。然后,我们模拟新的元素上的点击事件来触发下载。

现在让我们从httpbin获取一个图像:

index.html

<DIV>

<a href='#' id='trigger'>请求图片和下载</a>

<img />

</ DIV>

main.js

我们正在为xxxx.org创建对JPEG图像的请求,并使用与之前相同的逻辑,将图像数据加载到一个blob

并将其下载到用户文件系统。

利用这种技术,我们可以优雅地将我们需要的所有额外属性添加到ajax请求中。你甚至可以将它包装在一个漂亮的Vue.JS或React组件中。

DEMO下载地址:https://dwz.cn/Jw3z6fVq

js之Ajax下载文件的更多相关文章

  1. 如何用ajax下载文件

    引子 在HTML5没来之前,浏览器想要下载文件,可能有这么几种方式: 借助a标签,<a href="学习资料.xlsx"></a> window.locat ...

  2. Ajax 下载文件 文件被损坏

    问题表现 Ajax 下载文件成功后,打开提示格式损坏,源代码如下: axios({ method: 'get', url: "/public/工作簿1.xlsx", // 静态资源 ...

  3. Ajax下载文件(页面无刷新)

    说明:Ajax是无法实现文件传输的,本文只是模拟了Ajax不刷新页面就可以请求并返回数据的效果.实质上还是通过提交form表单来返回文件流的输出. 分步实现逻辑: ajax请求服务器,访问数据库,根据 ...

  4. js通过 URL下载文件

    页面上一个button,点击之后触发一个function去请求数据,返回 pdf/epub 的URL,然后下载这个文件. 本来是直接用 a 写的,href里放资源地址,target设为'_blank' ...

  5. jQuery用FormData对象实现文件上传以及如何通过ajax下载文件

    之前在Vue的项目里面用到过文件上传,封装好的组件用起来比较顺手,查询Element-UI文档,十八般武器样样都有,一顿操作猛如虎,一看--跑偏了(⊙o⊙)-,我的意思就是用框架实现比较简单,但是如果 ...

  6. 怎么用ajax下载文件

    可能大家都觉得没有必要用ajax来下载东西,用window.open(url)就可以搞定 但是这有一个问题,就是这就限定了只能用GET方式来请求了: 可能你又会说GET很符合REST的要求呀. 但是如 ...

  7. python django + js 使用ajax进行文件上传并获取上传进度案例

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 原生js实现ajax的文件异步提交功能、图片预览功能.实例

    采用html5使得选择图片改变时,预览框中图片随之改变.input文件选择框美化.原生js完成文件异步提交 效果图: 代码如下,可直接复制并保存为html文件打开查看效果 <html> & ...

  9. jquery.form.js ie 下下载文件已经ie8失效问题解决方案

    https://github.com/malsup/form/blob/master/jquery.form.js在使用这个插件时遇到的问题1.ie下会变成下载文件,解决方案是在后端返回时设置'Con ...

随机推荐

  1. java课程之团队开发冲刺1.3

    一.总结昨天进度 1.完成任务指标,但是有些问题没有得到根本上解决,只是换方式解决了 2.使用时间:6小时 二.遇到的困难 1.在设置AlertDialog弹窗组件的时候,没有办法获取选中值,再实验多 ...

  2. spring cloud Ribbon

    参考:https://www.jianshu.com/p/1bd66db5dc46 Ribbon 是什么 spring cloud ribbon 是一个基于HTTP 和 TCP 的客户端负载均衡工具, ...

  3. spring 自定参数解析器(HandlerMethodArgumentResolver)

    https://blog.csdn.net/u010187242/article/details/73647670

  4. python note 16 re模块的使用

    1.re模块(#regex) # 查找 # findall : 匹配所有 每一项都是列表中的一个元素 import re ret = re.findall('\d+','dawdawd154wadwa ...

  5. Codeforces Round #553 (Div. 2) C题

    题目网址:http://codeforces.com/contest/1151/problem/C 题目大意:给定奇数集和偶数集,现构造一个数组,先取奇数集中一个元素1,再取偶数集二个元素2,4,再取 ...

  6. 《Java从入门到精通》学习总结3

    1. 3种构成重载的条件: 参数类型不同.参数个数不同.参数顺序不同 只有返回值类型不同并不足以区分两个方法的重载. 2. import关键字除了导入包之外,还可以导入静态成员,这是JDK 5.0以上 ...

  7. SPA

    为什么用SPA 1. 减少服务器压力  如果不用spa  那么每次切换页面的时候,就会向服务器发送一个请求 服务器返回一个html文件   如果使用了SPA  在切换时,不需要请求服务器,只要通过本地 ...

  8. Tableau可视化绘图教程

    https://www.w3cschool.cn/tableau/tableau_environment_setup.html

  9. Linux查看机器负载

    负载(load)是linux机器的一个重要指标,直观了反应了机器当前的状态.如果机器负载过高,那么对机器的操作将难以进行. Linux的负载高,主要是由于CPU使用.内存使用.IO消耗三部分构成.任意 ...

  10. log4j.properties配置与将异常输出到Log日志文件实例

    将异常输出到 log日志文件 实际项目中的使用: <dependencies> <dependency> <groupId>org.slf4j</groupI ...