PHP将PDF发送到客户端浏览器而不将其写入磁盘(服务器端)

时间:2017-08-02 16:17:22

标签: php pdf

我有一个从用户提交的pdf文件(文件上传)。当我得到文件时,我通过两个函数运行它并将其作为blob存储在数据库中。

$file = base64_encode(file_get_contents($pathToFile));

我想要做的是将pdf发送回浏览器而不将其写入磁盘(服务器端)。如果我再次构建文件,将其保存到磁盘,并生成一个文件的链接,然后它打开正常。

file_put_contents("pathToPutFile", base64_decode($dataFromDB));

但如果我尝试将pdf文件发送到浏览器而不保存到磁盘,则会出现错误“无法加载PDF文档”,如下图所示。

PDF Error Message

以下用于尝试此专长的代码。

$data = base64_decode($origSel['InvestigationFile']);

header('Content-Type: application/pdf');
header('Content-Disposition: inline; filename="Statement"');
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');
echo $data;

如果文件没有先写入磁盘(服务器端),是否可以将文件发送给用户?

如果有可能,我错过了什么/做错了什么?

如果不可能,那么什么使它变得不可能,以及在用户完成查看后立即确保PDF文件从服务器中删除的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

这是失败的,因为我在文档的这一部分之前有一些输出。

<!DOCTYPE html>
<html lang="en">
<head>
     <meta charset="utf-8">
</head>
<body>
<div>
     "navigation bar goes here"
</div>
     <?php
        $data = base64_decode($origSel['InvestigationFile']);

        header('Content-Type: application/pdf');
        header('Content-Disposition: inline; filename="Statement"');
        header('Content-Transfer-Encoding: binary');
        header('Accept-Ranges: bytes');
        echo $data;
     ?>

删除所有HTML后,我能够让它工作。