AJAX + PHP +下载mPDF生成的文件

问题描述 投票:2回答:2

我正在创建一个应用程序,用户可以在桌面上查看许多PDF。每行还有一个复选框,允许用户检查或不检查我稍后将描述的下一个操作。

这些复选框位于表单标签内,之后有一个提交按钮,通过POST METHOD通过AJAX REQUEST将数组内的所有文件ID发送到PHP文件。

AJAX请求如下所示:

$.ajax({
    url: link,
    type: 'POST',
    data: $(this).serialize(),
    success: function(result) {

        if (result == 'ok') {

            if (redirect) {
                window.location.replace(redirect);
            } else {
                window.location.reload();
            }

        } else {

            if (callback) {
                $('#' + callback).html('<div>' + result + '</div>');
            } else {
                alert(result);
            }   

        }

    }
});

所以没有什么特别的,所有的帖子数据都被采集并发送到特定的PHP文件。

更进一步,在PHP文件方面 - 有一个算法,通过post post方法ID检查用户是否可以访问所有文件。所以有一个结合SQL查询的简单循环。

当LOOP验证他有有效访问权限时 - 我正在创建一个大文件,包含他之前复选框选择的所有文件。我在这种情况下使用mPDF和合并文件对我来说不是问题。

然后在服务器上创建合并文件并具有特定名称。

现在 - 正如我之前所说的,这个文件应该是非常私密的,所以在用户下载之后,我希望脚本也删除这个文件。但我无法处理下载它的部分。

我试图从PHP文件端发送标题但它结束就像奇怪的字符输出到回调div元素而不是显示下载对话框。

我发送标题的代码如下所示

$file = __PATH_TO_FILE__ . 'MaJjYzA4OGE4N2Q0MjUwNmJkZDQ0ZmZm.pdf'; //file which in fact exists

header('Content-type:  application/download'); //or event tried with application/pdf => no difference
header('Content-Length: ' . filesize($file));
header('Content-Disposition: attachment; filename="'. $file .'"');
return readfile($file);

总结,而不是提示对话+下载 - 奇怪的字符覆盖回调区域。

如果你们知道发生了什么以及我应该在这个具体情况下做些什么,我将很乐意提供帮助。另外,如果您建议我在用户下载文件后删除文件,甚至取消提示对话框,以便文件将不再保留在服务器上,我将更感谢。

php jquery ajax mpdf
2个回答
2
投票

您需要从ajax返回指向您文件的链接

$file = __PATH_TO_FILE__ . 'MaJjYzA4OGE4N2Q0MjUwNmJkZDQ0ZmZm.pdf'; //file which in fact exists
echo $file;

在你ajax成功你只需打开一个新窗口到该文件;

success: function(file) {
   window.open(file);
}

另一种解决方案是使用隐藏的下载链接

  success: function(file) {
       $('body').append('<a href="'+file+'" class="hiddenLink" download style="display:none;"></a>');
      $('.hiddenLink').trigger('click');//or $('.hiddenLink')[0].click();
    }

0
投票

它对我有用。

success: function(response) { i++; $('#buttonid').append('<a href="'+response+'" class="hiddenlink" download style="display:none"></a>'); if(i == 1){ $('.hiddenlink')[0].click(); } else { i=0; $('.hiddenlink').remove(); } }

© www.soinside.com 2019 - 2024. All rights reserved.