降低下载速度

时间:2018-08-02 22:31:28

标签: javascript jquery asynchronous jszip filesaver.js

我有一个脚本,可以下载多个文件(从PHP生成PDF)并将其压缩为一个文件。但是我面临服务器的问题-下载(和生成)约。 100个文件主要杀死了托管服务器-前10个工作正常,但接下来会产生错误500。我想增加文件下载之间的延迟,并确保文件在此后的一段时间内一个接一个地下载-目前,我有一种异步方法文件下载。文件甚至可以下载几分钟-迅速生成zip并不重要。

正在使用的代码:

jQuery(function ($) {
    var Promise = window.Promise;
    if (!Promise) {
        Promise = JSZip.external.Promise;
    }

    function urlToPromise(url) {
        return new Promise(function(resolve, reject) {
            JSZipUtils.getBinaryContent(url, function (err, data) {
                if(err) {
                    reject(err);
                } else {
                   resolve(data);
                }
             });
        });
    }

    var $form = $("#download_form").on("submit", function () {
        var zip = new JSZip();
        urls = ["url1", "url2", "url3"];
        uLen = urls.length;
        for (i = 0; i < uLen; i++) {
            var url = urls[i];
            var filename = "";
            if (url.match(/.*print=pdf/g)){
                filename = url.replace(/.*\/[0-9]*\//g, "");
                filename = filename.replace(/\/\?print=pdf/g, ".pdf")
            } else {
                filename = url.replace(/.*\//g, "");
            }
            zip.file(filename, urlToPromise(url), {binary:true});
        };

        zip.generateAsync({type:"blob"}).then(function callback(blob) {
            saveAs(blob, "doc.zip");
        }, function (e) {
            showError(e);
        });

        return false;
    });
});

0 个答案:

没有答案