AJAX + PHP + 下载 mPDF 生成的文件
AJAX + PHP + Download mPDF generated file
我正在创建一个应用程序,用户可以在其中查看 table 中呈现给他的许多 PDF。每行还有一个复选框,允许用户检查或不检查我稍后将描述的下一个操作。
这些复选框在表单标签内,之后有一个提交按钮,通过 POST 方法通过 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 文件端发送 headers,但它以奇怪的字符输出到回调 div 元素而不是显示下载对话框结束。
我发送 headers 的代码如下所示
$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);
总结一下,不是提示对话框+下载-奇怪的字符覆盖回调区。
如果你们知道发生了什么以及在这种特定情况下我应该做什么,我很乐意提供帮助。另外,如果您建议我如何在用户下载文件后删除文件,甚至取消提示对话框,使文件不再保留在服务器上,我将更加感激。
您需要 return link 从 ajax
到您的文件
$file = __PATH_TO_FILE__ . 'MaJjYzA4OGE4N2Q0MjUwNmJkZDQ0ZmZm.pdf'; //file which in fact exists
echo $file;
在你 ajax 成功后,你只需打开一个新的 window 到那个文件;
success: function(file) {
window.open(file);
}
另一个解决方案是使用隐藏下载 link
success: function(file) {
$('body').append('<a href="'+file+'" class="hiddenLink" download style="display:none;"></a>');
$('.hiddenLink').trigger('click');//or $('.hiddenLink')[0].click();
}
它对我有用。
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();
}
}
我正在创建一个应用程序,用户可以在其中查看 table 中呈现给他的许多 PDF。每行还有一个复选框,允许用户检查或不检查我稍后将描述的下一个操作。
这些复选框在表单标签内,之后有一个提交按钮,通过 POST 方法通过 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 文件端发送 headers,但它以奇怪的字符输出到回调 div 元素而不是显示下载对话框结束。
我发送 headers 的代码如下所示
$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);
总结一下,不是提示对话框+下载-奇怪的字符覆盖回调区。
如果你们知道发生了什么以及在这种特定情况下我应该做什么,我很乐意提供帮助。另外,如果您建议我如何在用户下载文件后删除文件,甚至取消提示对话框,使文件不再保留在服务器上,我将更加感激。
您需要 return link 从 ajax
到您的文件$file = __PATH_TO_FILE__ . 'MaJjYzA4OGE4N2Q0MjUwNmJkZDQ0ZmZm.pdf'; //file which in fact exists
echo $file;
在你 ajax 成功后,你只需打开一个新的 window 到那个文件;
success: function(file) {
window.open(file);
}
另一个解决方案是使用隐藏下载 link
success: function(file) {
$('body').append('<a href="'+file+'" class="hiddenLink" download style="display:none;"></a>');
$('.hiddenLink').trigger('click');//or $('.hiddenLink')[0].click();
}
它对我有用。
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();
}
}