js异步下载文件请求

注意 :通常下载文件是用get请求

window.location.href=url;
但是 我们需要下载完成监听,所以必须要异步执行、用常规的ajax是不可以的。我们要用blob对象来实现1.原生的如何实现
function loadDown(query) {
        var url = "${ctx}/bill/billExport"+query;
        var xhr = new XMLHttpRequest();
        xhr.open(‘GET‘, url, true);    // 也可以使用POST方式,根据接口
        xhr.responseType = "blob";
        xhr.onload = function () {
            if (this.status === 200) {
                $(‘#loadingModal‘).modal(‘hide‘);
                var content = this.response;
                var aTag = document.createElement(‘a‘);
                var blob = new Blob([content]);
                var headerName = xhr.getResponseHeader("Content-disposition");
                var fileName = decodeURIComponent(headerName).substring(20);
                aTag.download = fileName;
                aTag.href = URL.createObjectURL(blob);
                aTag.click();
                URL.revokeObjectURL(blob);
            }
        };
        xhr.send()
    }
2 ajax如何实现
$.ajax({
            url:options.url,
            // dataType:"text",
            // type:"get",
            success:function(result){
                var content = this.response;
                var aTag = document.createElement(‘a‘);
                var blob = new Blob([content]);
                var headerName = xhr.getResponseHeader("Content-disposition");
                var fileName = decodeURIComponent(headerName).substring(20);
                aTag.download = fileName;
                aTag.href = URL.createObjectURL(blob);
                aTag.click();
                URL.revokeObjectURL(blob);
            }
        })

后台:

response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename,"UTF-8"));

参考博客:https://blog.csdn.net/Concsdn/article/details/79961295

https://blog.csdn.net/weixin_38661747/article/details/80754258

原文地址:https://www.cnblogs.com/coder-lzh/p/10435617.html

时间: 2024-07-29 20:59:16

js异步下载文件请求的相关文章

android开发步步为营之67:使用android开源项目android-async-http异步下载文件

android-async-http项目地址 https://github.com/loopj/android-async-http,android-async-http顾名思义是异步的http请求,不过它也支持同步请求的,本文主要使用了android-async-http做异步请求下载文件.每当app需要更新新版本的时候,就需要用到下载功能的,经研究android-async-http这个第三方开源项目还是挺好用的,这里介绍给大家.     1.下载类DownloadManager.java

ajax异步下载文件

ajax不支持异步下载,但我想你是不想让地址栏发生跳转,如果是这样的话,我到是有几种方法.这几种方法的原理都是一样的,就是发送同步请求,当同步请求下载东西是并不会改变url <a href="你要下载的资源的url">下载</a> document.href="你要下载的资源的url" var form = $("<form action='你要下载的资源的url' method='post'></form>

Unity3d C# HttpWebRequest 异步下载文件

最近一直在把公司游戏迁移到支持ARM64,中间出现了很多BUG或者Unity目前不支持操作的问题,这两天遇到异步HttpWebRequest不支持的问题,因为之前一直没有接触,所以也趁机学习了下相关使用. 下面通过一个例子,来使用HttpWebRequest异步下载一个ZIP文件. using UnityEngine; using System.Collections; using System.Net; using System.IO; using System; using System.T

WebClient异步下载文件

namespace ConsoleAppSyncDownload{    class Program    { static void Main(string[] args)        {            WebClient webClient = new WebClient();            //Console.Write("输入下载文件地址:");            //var s = Console.ReadLine();            Conso

js创建下载文件

function downloadFile(fileName, content){ var aLink = document.createElement('a'); var blob = new Blob([content]); var evt = document.createEvent("HTMLEvents"); // initEvent 不加后两个参数在FF下会报错, 感谢 Barret Lee 的反馈 evt.initEvent("click", fals

js post 下载文件

function DownLoadPost(url,data) { if (url && data) { var form = $('<form>{{ xsrf_form_html()|safe }}</form>'); form.attr('action', url + "?rand=" + Math.random()); form.attr('method', 'post'); for (var item in data) { console

通用的js异步ajax文件上传函数

无需表单,直接加点击事件即可, caseimg为input表单,image为图片显示 function upimage() { $('#form-upload').remove(); $('body').prepend('<form enctype="multipart/form-data" id="form-upload" style="display: none;"><input type="file"

unity下载文件三(http异步下载)

异步下载,顾名思义就是不影响你主线程使用客户端的时候,人家在后台搞你的明堂. 直接入主题,既然要下载,首先得请求,请求成功之后进行回调,这就是一个异步过程,异步回调的时间不可控. 1.首先请求下载. public bool DownLoadFile(DownLoadFileModel file) { try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://192.168.1.1:8080/" +

js异步加载 defer和async 比较

网上说法很多,很少一句话能总结清楚的,终于找到两句一针见血的描述,很到位: 相同点:都不阻塞DOM解析 defer  :顺序:保证先后顺序.解析:HTML 解析器遇到它们时,不阻塞(脚本将被异步下载),待文档解析完成之后,执行脚本. async  :顺序:不保证先后顺序.解析:HTML 解析器遇到它们时,不阻塞(脚本将被异步下载,一旦下载完成,立即执行它),并继续解析之后的文档. 总结一下:defer 效果是 :js异步下载完毕后且DOM解析完成后且DOMContentLoaded 事件触发之前