这些复选框位于表单标签内部,在其之后有一个提交按钮,通过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);
}
}
}
});
所以,没有什么特别的,所有的帖子数据都被获取并发送到指定的PHP文件。
进一步地,在PHP文件方面 - 有一个算法检查用户是否可以通过接收到的ID访问所有文件。因此,这里结合了简单的循环和SQL查询。
当循环验证他有有效的访问权限时 - 我会创建一个由前面的复选框选择的所有文件组成的大文件。在这种情况下,我使用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);
简而言之,在特定情况下,不要使用提示对话框+下载 - 奇怪的字符覆盖回调区域。
如果您知道发生了什么,并且在这种情况下应该做什么,我会很高兴得到帮助。此外,如果您建议我在用户下载文件后删除文件或甚至取消提示对话框,以便文件不再停留在服务器上,我将更加感激。