Download Multiple Files Without Using Zip File

后端 未结 5 1591
独厮守ぢ
独厮守ぢ 2020-12-02 21:46

I have a generic handler Document.ashx that creates Word documents on the fly by reading information from the querystring like this Document.ashx?clientid

5条回答
  •  萌比男神i
    2020-12-02 22:17

    So this is propably overkill but works in IE9, FF7, and Chrome 16:

    Inspired by this SO post

    jQuery Plugins:

    • json2.js
    • $.cookie()
    • $.bbq()

    C# in handler:

    public void ProcessRequest (HttpContext context) {
    
        ...
    
        if (!string.IsNullOrEmpty(context.Request.QueryString["downloadid"])) 
              Response.Cookies[context.Request.QueryString["downloadid"]].Value = "complete";
    }
    

    Javascript/jQuery:

    function downloadFile(url, downloadid) {
        //set a cookie with a unique download id
        $.cookie(downloadid, 'pending', { path: '/' });
    
        //create a new url
        var newurl = $.param.querystring(url, { downloadid: downloadid });
    
        //append an iframe with new url
        $("body").append("");
    }
    
    function downloadComplete(downloadid) {
        //check if download is pending
        return $.cookie(downloadid) == "complete";
    }
    
    function downloadManager(arrDownloads) {
        //loop through download items backwards
        var allComplete = false;
        for (var i = arrDownloads.length; i > 0; i--) {
            if (downloadComplete(arrDownloads[i - 1].downloadid)) {
                //download the next one if it exists
                if (i == arrDownloads.length) {
                    allComplete = true;
                }
                else {
                    downloadFile(arrDownloads[i].url, arrDownloads[i].downloadid);
                }
                //stop checking for completed downloads
                break;
            }
        }
    
        if (allComplete) {
            //remove cookies
            for (var i = arrDownloads.length; i > 0; i--) {
                $.cookie(arrDownloads[i - 1].downloadid, null, { path: '/' });
            }
    
            //remove iframes
            $("iframe[data-downloadid]").remove();
        }
        else {
            setTimeout("downloadManager(" + JSON.stringify(arrDownloads) + ");", 500);
        }
    }
    
    function downloadFiles(arrurls) {
        var arrDownloads = [];
    
        for (var i = 0; i < arrurls.length; i++) {
            var item = new Object();
            item.url = arrurls[i];
            item.downloadid = newGuid();
            arrDownloads.push(item);
        }
    
        //start the first download
        downloadFile(arrDownloads[0].url, arrDownloads[0].downloadid);
        //initiate the manager
        downloadManager(arrDownloads);
    }
    
    $(function () {
        var arrurls = [];
        arrurls.push("Document.ashx?clientid=123&documentid=10");
        arrurls.push("Document.ashx?clientid=123&documentid=11");
        arrurls.push("Document.ashx?clientid=123&documentid=12");
        arrurls.push("Document.ashx?clientid=123&documentid=13");
        arrurls.push("Document.ashx?clientid=123&documentid=14");
        downloadFiles(arrurls);
    });
    

提交回复
热议问题