我正在将iframe src设置为格式为“ blob:http://localhost:3000/f87808a3-9a74-4d61-b7ae-7ac37ff38325”的Blob网址。 iframe会显示使用某些javascript创建的pdf。在所有浏览器中都能正常显示pdf。在Chrome和Firefox中,可以使用集成了浏览器的pdf查看器将此pdf下载到硬盘驱动器。
但是,在Mac上的Safari 12.1中,单击pdf查看器的下载按钮时,没有任何反应。
这是Safari中的已知错误吗?
有没有办法使Safari上的pdf blob网址下载正常工作?
答案 0 :(得分:0)
这与我的答案here有关。
显然,这是{em>有时发生的Safari 12.1 bug。 target = "_self"
并不固定,它与different regression bug有关。
在修复该错误之前,丑陋的解决方法是:
JavaScript代码
async createDownloadElementAndClick(blob, fileName) {
let options = {
method:"POST",
body:blob
};
await fetch(`https://example.com/upload.php`, options);
window.open(`https://example.com/download.php?${fileName}`, "_self");
}
PHP代码
在upload.php中:
<?php
// add any authentication code as necessary here
// gets entire POST body
$data = file_get_contents('php://input');
$filename = "temp/download.pdf";
// write the data out to the file
$fp = fopen($filename, 'wb');
fwrite($fp, $data);
fclose($fp);
?>
在download.php中:
<?php
ob_start();
$file = $_SERVER["QUERY_STRING"];
// This is the line that tells Safari to download the file instead of opening it
header("Content-disposition: attachment; filename=$file");
header("Content-type: application/pdf", false);
readfile("temp/download.pdf");
ob_flush();
// This deletes the pdf so there is little chance of contaminating the next call
unlink("temp/download.pdf");
?>