2012-03-21 23 views
3

晚上好。保存由AJAX脚本生成的文件

我正在使用Yii框架和mPDF库通过Ajax脚本生成一些PDF文件,我需要在用户的浏览器中强制“另存为”对话框。

我知道如何用单个用户下载单个文件来解决此问题。 有没有人有关于如何使它可以在高负载系统上工作的提示(例如,试图生成和下载PDF的多个用户将尝试访问一个临时文件会导致错误)?

我应该为每个会话生成一个单独的文件吗?清理这些临时文件的方式会很好吗?

谢谢你的帮助。

+0

感谢球员,一切似乎很清楚,要在上午^^ – Elena 2012-03-21 20:19:54

+0

通过创建临时解决它尝试文件。谢谢你的帮助! – Elena 2012-03-22 10:06:48

回答

1

制作隐形iframe。从JS将iframe的src设置为生成PDF的服务器上的脚本。

<iframe src="http://yoursite.com/download-file.php?report=pdf&param1=value1&param2=value2..." width="1" height="1"></iframe> 

然后(我不知道你是如何与MPDF做到这一点),关键是要输出脚本文件直接进入浏览器。这是这样的:

<?php 
    $x = some_function($_GET['param1'],$_GET['param2', ...); // PDF GEN. ROUTINE, BASED ON REQUEST DATA, HOWEVER YOU DO IT 
    header('Content-type: application/pdf'); 
    echo $x; 

这应该解决您的所有问题。

1

首先,我建议你生成每个生成的PDF不同的临时文件,以避免任何可能的错误,如一个用户下载别人的PDF等

要清理临时目录中,我会使用一个cronjob删除所有超过N天的文件。

为了“强制保存对话框”,你必须设置Content-dispositionattachment

header('Content-Disposition: attachment; filename="myfile.pdf"');