在WordPress中使用ajax下载文件

时间:2014-10-27 09:20:26

标签: jquery ajax wordpress wordpress-plugin

是否可以使用WordPress Ajax下载文件。我有这个功能来下载附件。

function download_attachment()
{
    $file_path = $_POST['filename'];
    $file_mime = $_POST['mime'];
    $data['file_path'] = file_exists($file_path);

    try{
        header('Pragma: public');   // required
        header('Expires: 0');       // no cache
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Last-Modified: '.gmdate ('D, d M Y H:i:s', filemtime ($file_path)).' GMT');
        header('Cache-Control: private',false);
        header('Content-Type: '.$file_mime);
        header('Content-Disposition: attachment; filename="'.basename($file_path).'"');
        header('Content-Transfer-Encoding: binary');
        header('Content-Length: '.filesize($file_path));    // provide file size
        header('Connection: close');
        set_time_limit(0);
        @readfile("$file_path") or die("File not found.");

    }catch(Exception $e)
    {
        $data['error'] = $e->getMessage() ." @ ". $e->getFile() .' - '. $e->getLine();
    }
    }
    echo json_encode($data);
    die();
}

使用此函数连接到WordPress主函数:

    add_action('wp_ajax_download_attachment','download_attachment');

jQuery代码是这样的:

var data = {
        'function': 'download_attachment',
        'filename': file_path,
        'mime': mime
    };

    jQuery.ajax({
        url: ajaxurl,
        type: "POST",
        data: data,
        success: function(return_data, textStatus, jqXHR) {
            parsedData = kalimahJS.parseJSON(return_data);
            window.open(parsedData.url);
        }
    })

屏幕上显示最终结果为0。还有另一种方法吗?

2 个答案:

答案 0 :(得分:0)

尝试添加以下代码

add_action( 'wp_ajax_nopriv_download_attachment', 'download_attachment' );

答案 1 :(得分:0)

好。

我来到这里,2年后(几乎完全),从近5年前发布一个更老的答案的链接:

https://stackoverflow.com/a/6668806/1356098

  

AJAX不适合下载文件。弹出一个新窗口,下载链接作为其地址,或window.location = ...

注意:我按照@yitwail 的建议将代码更改为window.location

仍然......我在这里找到了一些有用的信息:https://marksdevserver.com/2011/03/10/downloading-file-ajax/