AJAX + PHP + 下载 mPDF 生成文件

Posted

技术标签:

【中文标题】AJAX + PHP + 下载 mPDF 生成文件【英文标题】:AJAX + PHP + Download mPDF generated file 【发布时间】:2018-11-08 07:31:26 【问题描述】:

我正在创建一个应用程序,用户可以在其中查看在表格中呈现给他的许多 PDF。每行还有一个复选框,允许用户检查或不检查我将在稍后描述的下一个操作。

这些复选框位于表单标签内,之后有一个提交按钮,该按钮通过 POST METHOD 通过 AJAX 请求将数组内的所有文件 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);
               

        

    
);

所以没什么特别的,所有的post数据都会被发送到特定的PHP文件中。

进一步,在 PHP 文件方面 - 有一个算法可以通过接收到的 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);

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

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

【问题讨论】:

所以你将你的 pdf 文件附加到一个 html 页面,你期望什么? 现在 - 希望得到任何帮助和建议我应该改变什么 从 readfile($file) 中删除返回并检查。 @suraj - 在我这样做之后,什么都没有发生 查看此链接可能对您有所帮助***.com/questions/12295604/php-simple-download-script 【参考方案1】:

你需要从 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();
    

【讨论】:

我会检查一下 发生了变化,但网络浏览器阻止了弹出窗口。那么如何实现下载对话框窗口呢? 什么下载对话框窗口? 下载提示窗口,用户可以将文件保存到自己的电脑 很高兴能提供帮助【参考方案2】:

它对我有用。

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();

【讨论】:

以上是关于AJAX + PHP + 下载 mPDF 生成文件的主要内容,如果未能解决你的问题,请参考以下文章

PHP使用mpdf 生成pdf文件

PHP使用mpdf 生成pdf文件

使用 ajax 和 mpdf 将 html 转换为 pdf

Yii, Php, mPDF, 生成带有不同方向小部件的 pdf

使用 mpdf 时需要设置 HTTP Header 吗?

PHP中使用mpdf 导出PDF文件的实现方法