[Javascript]XMLHttpRequest对象实现下载进度条
摘要
可以通过设置⼀个XMLHttpRequest对象的responseType属性来改变⼀个从服务器上返回的响应的数据类型。可⽤的属性值为空字符串(默认), "arraybuffer", "blob", "document", 和 "text". response属性的值会根据responseType属性的值的不同⽽不同, 可能会是⼀个ArrayBuffer, Blob, Document, string,或者为NULL(如果请求未完成或失败)。
新版本的XMLHttpRequest对象,传送数据的时候,有⼀个progress事件,⽤来返回进度信息。
它分成上传和下载两种情况。下载的progress事件属于XMLHttpRequest对象,上传的progress事件属于XMLHttpRequest.upload对象。⼀个例⼦
服务端以⼀个⼀般处理程序来处理下载的请求。
///<summary>
/// download 的摘要说明
///</summary>
我想学计算机怎么学public class download : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string fileName = "1.docx";//客户端保存的⽂件名
string filePath = context.Server.MapPath("~/file/" + fileName);//路径
//以字符流的形式下载⽂件
FileStream fs = new FileStream(filePath, FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
好教育培训机构fs.Close();
context.Response.ContentType = "application/octet-stream";
//通知浏览器下载⽂件⽽不是打开
context.Response.AddHeader("Content-Length", bytes.Length.ToString());
context.Response.AddHeader("Content-Transfer-Encoding", "Binary");
context.Response.AddHeader("Content-Disposition", "attachment; filename=" +
HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
context.Response.BinaryWrite(bytes);
context.Response.Flush();
context.Response.End();
}
public bool IsReusable
{
get
jquery下载文件请求{
return false;
}
}
}
js
<!DOCTYPE html>
<html xmlns="/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<script src="jquery-2.1.1.min.js"></script>
<title></title>
</head>
<body>
<div id="a1" data-filename="1.docx">下载</div>
<div id="progressing"></div>
<script>
$('#a1').click(function () {
var that = this;
var page_url = 'download.ashx';
var req = new XMLHttpRequest();
req.open("POST", page_url, true);
//监听进度事件
req.addEventListener("progress", function (evt) {
if (evt.lengthComputable) {
var percentComplete = evt.loaded / al;
console.log(percentComplete);
$("#progressing").html((percentComplete * 100) + "%");
同步导出和异步导出}
}, false);
if (adyState === 4 && req.status === 200) {
var filename = $(that).data('filename');
if (typeof window.chrome !== 'undefined') {
直方图怎么看左偏// Chrome version
var link = ateElement('a');
link.href = sponse);
link.download = filename;
link.click();
} else if (typeof window.navigator.msSaveBlob !== 'undefined') {
// IE version
var blob = new Blob([sponse], { type: 'application/force-download' });
window.navigator.msSaveBlob(blob, filename);
} else {
// Firefox version
var file = new File([sponse], filename, { type: 'application/force-download' }); window.ateObjectURL(file));
}
}
};
req.send();
});
</script>
</body>
</html>
测试
XMLHttpRequest Level 2 使⽤指南
关于XMLHttpRequest新规范可以查看这篇⽂章的介绍
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论