正在尝试通过 PHP 强制下载
Attempting to force download via PHP
我有一个 PDF 文件存储在 Wordpress 堆栈的上传目录中。我试图强制浏览器通过 AJAX.
下载 PDF
function get_pdf(){
$file_path = realpath(WP_CONTENT_DIR).'/uploads/pdfs/12345.pdf';
if (file_exists($file_path)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file_path).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file_path));
readfile($file_path, true);
exit;
}
}
当我运行这个函数没有任何反应。我也尝试过这种触发下载的方法:
if (file_exists($file_path)) {
$handle = fopen($file_path, 'rb');
$buffer = '';
while (!feof($handle)) {
$buffer = fread($handle, 4096);
echo $buffer;
ob_flush();
flush();
}
fclose($handle);
}
关于如何调试它以使其正常工作有什么建议吗?
当浏览器导航到URL时,响应将内联显示(即在浏览器window中)或保存。其中哪一个发生由文件类型和 Content-Disposition
header.
的组合决定
当浏览器使用 Ajax 请求数据时,响应 将由发出请求的 JavaScript 处理。
响应 header(或有关响应的任何其他内容)无法使 JavaScript 保存文件而不是将其传递给 JavaScript 进行处理。
JavaScript可以写成注意Content-Disposition
header但是,一般来说,JS的作者赢了不需要像那样使用 header 来决定如何处理文件。
我有一个 PDF 文件存储在 Wordpress 堆栈的上传目录中。我试图强制浏览器通过 AJAX.
下载 PDF function get_pdf(){
$file_path = realpath(WP_CONTENT_DIR).'/uploads/pdfs/12345.pdf';
if (file_exists($file_path)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file_path).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file_path));
readfile($file_path, true);
exit;
}
}
当我运行这个函数没有任何反应。我也尝试过这种触发下载的方法:
if (file_exists($file_path)) {
$handle = fopen($file_path, 'rb');
$buffer = '';
while (!feof($handle)) {
$buffer = fread($handle, 4096);
echo $buffer;
ob_flush();
flush();
}
fclose($handle);
}
关于如何调试它以使其正常工作有什么建议吗?
当浏览器导航到URL时,响应将内联显示(即在浏览器window中)或保存。其中哪一个发生由文件类型和 Content-Disposition
header.
当浏览器使用 Ajax 请求数据时,响应 将由发出请求的 JavaScript 处理。
响应 header(或有关响应的任何其他内容)无法使 JavaScript 保存文件而不是将其传递给 JavaScript 进行处理。
JavaScript可以写成注意Content-Disposition
header但是,一般来说,JS的作者赢了不需要像那样使用 header 来决定如何处理文件。