强制下载所有<a> tags using jquery</a>上的文件

时间:2014-12-22 12:49:00

标签: javascript php jquery html

我正在对数字内容实施结帐流程。当用户下订单时,我会向他展示他购买的所有产品以及产品旁边的下载链接。我的客户希望在加载成功页面时,所有产品都应自动下载。

以下是代码段:

产品下载链接的页面的HTML代码段

<p>Some digital product name</p>
<a class='digital-download' href="<?php echo Yii::app()->request->getBaseUrl('true'); ?>/site/downloadfile/filename/<?php echo $digital_download['filename']; ?>">Click here download</a>

我的启动文件下载操作的PHP代码(downloadfile action):

public function actionDownloadFile($filename) {
    $file = Yii::app()->request->getBaseUrl(true) . '/upload/digitaluploads/' . $filename; //file location
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="' . basename($file) . '"');
    readfile($file);
}

既然我的客户希望在加载页面时自动下载所有文件,我尝试使用jQuery:

$(document).ready(function() {    
    $('.digital-download').each(function() {
        var download_link = $(this).attr("href");
        window.location = download_link;
    });
});

问题:

它仅启动第一个文件的下载,并且不启动其他文件的下载。此外,跟随jQuery事件根本不起作用:

$(document).ready(function() {
    $('.digital-download').each(function() {
        $(this).click();
    });
});

任何解决方案?

1 个答案:

答案 0 :(得分:1)

在我看来,最佳解决方法是使用iframes

$('a.digital-download').each(function(){
    $('<iframe></iframe>', {src: $(this).attr('href')})
        .css({
            width:0,
            height:0,
            border:'none'
        })
        .appendTo('body');
});

将在其中加载文件并开始下载

编辑:最近必须使此解决方案适用于纯JavaScript

var body = document.getElementsByTagName('body'),
    elements = document.getElementsByClassName('digital-download'),
    element, src;
for(var I in elements)
{
    if(elements.hasOwnProperty(I) && elements[I].attributes.length > 0)
    {
        src = null;
        for(var O in elements[I].attributes)
        {
            if(elements[I].attributes.hasOwnProperty(O) && elements[I].attributes[O].name == 'href')
            {
                src = elements[I].attributes[O].value;
            }
        }
        if(typeof src != 'undefined' && null !== src)
        {
            element = document.createElement('iframe');
            element.style.width = 0;
            element.style.height = 0;
            element.style.borderWidth = 0;
            body[0].appendChild(element);
            element.src = src;
        }
    }
}