【发布时间】:2019-07-31 20:29:26
【问题描述】:
我正在使用 ajax 提交表单,提交表单后,我需要使用 php 库 mpdf 下载在服务器端生成的 pdf 文件。我不想将 pdf 文件保存在服务器中,因为用户下载后不再需要该文件。我在谷歌上搜索过,有人建议使用 Blob 对象。我还返回一个 json 响应以显示给用户。有人可以解释它是否可能以及如何实现它?非常感谢
这是我的 javascript 代码:
$.ajax({
type: form.method,
data: $(form).serialize(),
dataType: 'JSON',
beforeSend: function() {
// Show loader
$(".loader").show();
},
success: function(response) {
// Hide loader
$(".loader").hide();
if (response.error_code == '200') {
// Add class alert danger to the message
$('.alert', $('.horizontal-form')).addClass('alert-success').show();
// Show error message
$('#error_message').html(response.error_message);
// Remove default validation error message from template
$('#error_message').get(0).nextSibling.remove();
// Remove class alert danger if was left by previous validation
$('.alert', $('.horizontal-form')).removeClass('alert-danger');
// reset form fields
form.reset();
// Scroll back to show success message
scrollTo(success, -200);
}
}
});
这是我的 php 代码
if(isset($_POST['userLetter'])){
header("Content-Type", "application/pdf");
// Render the view using twig and pass params to it
$html=$twig->render('/km-letters/km-letter-new-user.twig', array(
// Render user details on twig topbar
'prova' => 'pippo'
));
$mpdf->WriteHTML($html);
return $mpdf->Output('foobar-' . time() . '.pdf','D');
}
另外从响应中我得到以下标题,我可以看到 pdf 文件:
缓存控制
公共,必须重新验证,最大年龄 = 0
连接
活着
内容描述
文件传输
内容处置
附件;文件名="doc.pdf"
内容传输编码
二进制
内容类型
申请/pdf
日期
格林威治标准时间 2019 年 3 月 10 日星期日 11:11:35
过期
1997 年 7 月 26 日星期六 05:00:00 GMT
保持活力
超时=5,最大值=99
上次修改
格林威治标准时间 2019 年 3 月 10 日星期日 11:11:35
编译指示
民众
服务器
阿帕奇
传输编码
分块
X-发电机
mPDF 7.1.9
X-Powered-By
PHP/7.3.0
但我也得到以下很长的字符串响应:
XHRPOSThttp://router.kondomatica.me/km-users/createUser#[HTTP/1.1 200 OK 332ms] HeaderCookieParametriRispostaTempiAnalisi dello stackPayload rispostax1JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9UeXBlIC9QYWdlCi9QYXJlbnQgMSAwIFIKL01lZGlhQm94IFswIDAgNTk1LjI4MCA4NDEuODkwXQo
【问题讨论】:
-
临时创建文件,返回给用户后,可以使用
unlink()删除。 -
嗨@pmatsumura 感谢您的回复,下载后我需要取消链接()文件吗?如何检测 ita 是否已下载?
-
您不必担心删除文件,因为您告诉 mPDF 将文件输出为下载文件。生成的 PDF 将保存在 RAM 中,并在发送到浏览器后从 RAM 中删除。
-
好的@pmatsumura 但我怎样才能做到这一点?我发布的代码似乎不起作用。
-
无法使用 Ajax 下载文件。有关更多信息,请参阅此帖子:stackoverflow.com/questions/4545311/…