ajax下载小于500M大文件【原】
不推荐使用的FileReader
之前用FileReader读取下载文件,当文件超过1M浏览器就立即扑街了
// 文件下载
function download(blob, fileName) {
var reader = new FileReader();
reader.readAsDataURL(blob);
reader.onload = function (e) {
//创建a标签,构造下载弹窗
var a = document.createElement("a");
a.id = "downloadTag";
a.download = fileName;
a.href = e.target.result;
$("body").append(a);
a.click();
$("#downloadTag").remove();
console.log("下载完成!");
} }
blob方式推荐
于是在网上找到另一种Blob读取方式
核心代码
var blob=new Blob([xhrRequest.response], {type: 'application/octet-binary'});
var link=document.createElement('a');
link.href=window.URL.createObjectURL(blob);
link.download="myFileName.zip"; link.click();
完整代码
request.js
/**
* 通用下載文件方法
* @param {url, data} config
*/
fileDownload: function (config) { tool.loading() var xhrRequest = xhr(config.url); xhrRequest.addEventListener("load", function (data) {
config.complete && config.complete(data)
}, false);
xhrRequest.addEventListener("error", function (data) {
tool.loading('close')
}, false); xhrRequest.onload = function (data) {
if (this.status === 200) {
var blob = new Blob([xhrRequest.response], { type: 'application/octet-binary' }); var contentDisposition = this.getResponseHeader('Content-Disposition');
var fileName = contentDisposition.split('=')[1];
download(blob, fileName)
tool.loading('close')
}
} // 发送请求
xhrRequest.send(JSON.stringify(config.data)); // 文件下载
function download(blob, fileName) {
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = fileName;
link.click();
link.remove(); // var reader = new FileReader();
// reader.readAsDataURL(blob);
// reader.onload = function (e) {
// //创建a标签,构造下载弹窗
// var a = document.createElement("a");
// a.id = "downloadTag";
// a.download = fileName;
// a.href = e.target.result;
// $("body").append(a);
// a.click();
// $("#downloadTag").remove();
// console.log("下载完成!");
// } } // request
function xhr(url) {
var xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.responseType = "blob";
xhr.setRequestHeader("Content-Type", "application/json;charset=utf-8");
xhr.setRequestHeader('token', storage.get('token')) return xhr
}
}
ajax下载小于500M大文件【原】的更多相关文章
- 框架基础:ajax设计方案(三)--- 集成ajax上传技术 大文件/超大文件前端切割上传,后端进行重组
马上要过年了,哎,回家的心情也特别的激烈.有钱没钱,回家过年,家永远是舔舐伤口最好的地方.新的一年继续加油努力. 上次做了前端的ajax的上传文件技术,支持单文件,多文件上传,并对文件的格式和大小进行 ...
- 前端通信:ajax设计方案(四)--- 集成ajax上传技术 大文件/超大文件前端切割上传,后端进行重组
马上要过年了,哎,回家的心情也特别的激烈.有钱没钱,回家过年,家永远是舔舐伤口最好的地方.新的一年继续加油努力. 上次做了前端的ajax的上传文件技术,支持单文件,多文件上传,并对文件的格式和大小进行 ...
- Asp.Net 文件下载1——流下载(适用于大文件且防盗链)(转)
使用流防盗链下载大文件 直接上 Asp.net 后置代码好了 using System; using System.Data; using System.Configuration; using Sy ...
- Android 多线程断点续传同时下载多个大文件
最近学习在Android环境中一些网络请求方面的知识,其中有一部分是关于网络下载方面的知识.在这里解析一下自己写的demo,总结一下自己所学的知识.下图为demo的效果图,仿照一些应用下载商城在Lis ...
- 使用kbmmw 的REST 服务实现上传大文件
我们在使用kbmmw的REST 服务时,经常会下载和上传大文件.例如100M以上的.kbmmw的rest服务中 提供标准的文件下载,上传功能,基本上就是打开文件,发送,接收,没有做特殊处理.这些对于文 ...
- Java实现FTP批量大文件上传下载篇1
本文介绍了在Java中,如何使用Java现有的可用的库来编写FTP客户端代码,并开发成Applet控件,做成基于Web的批量.大文件的上传下载控件.文章在比较了一系列FTP客户库的基础上,就其中一个比 ...
- ASP.NET Core下载大文件的实现
当我们的ASP.NET Core网站需要支持下载大文件时,如果不做控制可能会导致用户在访问下载页面时发生无响应,使得浏览器崩溃.可以参考如下代码来避免这个问题. 关于此代码的几点说明: 将数据分成较小 ...
- 前端JS 下载大文件解决方案
问题场景 点击导出按钮,提交请求,下载excel大文件(超过500M),该文件没有预生成在后端, 直接以文件流的形式返回给前端. 解决方案 在Vue项目中常用的方式是通过axios配置请求,读取后端返 ...
- iOS 大文件断点下载
iOS 在下载大文件的时候,可能会因为网络或者人为等原因,使得下载中断,那么如何能够进行断点下载呢? // resumeData的文件路径 #define XMGResumeDataFile [[NS ...
随机推荐
- Ajax之json返回结果是集合的处理
Jquery实现ajax: $.ajax({ type //数据的提交方式:get和post url //数据的提交路径 async //是否支持 ...
- Python学习day42-数据库的基本操作(1)
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- vue页面刷新数据丢失问题
参考: https://blog.csdn.net/aliven1/article/details/80743470 https://blog.csdn.net/liang37712 ...
- C#端一个不错的订单号生成规则
/// <summary> /// 订单助手 /// </summary> public class OrderHelper { /// <summary> /// ...
- c++设计模式:模板模式
模板模式和策略模式的区别: 模板方法模式的主要思想:定义一个算法流程,将一些特定步骤的具体实现.延迟到子类.使得可以在不改变算法流程的情况下,通过不同的子类.来实现“定制”流程中的特定的步骤. 策略模 ...
- Java内功修炼系列一观察者模式
观察者模式又称发布-订阅模式,就是观察者通过订阅被观察者,或关注被观察者,从而实时更新观察者的信息.比如我们玩微博的时候,如果关注了一些博主,那么当博主发动态时,在首页微博列表中就会自动更新这些博主发 ...
- c++ string 字符串
转载 http://www.renfei.org/blog/introduction-to-cpp-string.html 运算符重载 + 和 +=:连接字符串 =:字符串赋值 >.> ...
- 关于开启Eureka安全Security认证后,客户端死活注册不上的问题
遇到一个问题"开启Eureka服务端的安全认证后,客户端死活注册不到Eureka上",已经尝试了以下办法,完全搞不定... 客户端出错的版本: spring-boot:2.0.3. ...
- i\'ll make a man out of you
Let's get down to business To defeat the Huns Did they send me daughters When I asked for sons? You' ...
- KOA 学习(七) 路由koa-router
一.基本用法 var app = require('koa')(); var router = require('koa-router')(); router.get('/', function *( ...