【问题标题】:PHP Send A PDF To Clients Browser Without Writing It To Disk (Server Side)PHP 将 PDF 发送到客户端浏览器而不将其写入磁盘(服务器端)
【发布时间】:2018-01-09 23:40:27
【问题描述】:

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

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

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

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

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

用于尝试此壮举的代码如下。

$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 文件在用户完成查看后立即从服务器中删除的最佳方法是什么?

【问题讨论】:

    标签: php pdf


    【解决方案1】:

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

    <!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 后,我就可以让它工作了。

    【讨论】:

      猜你喜欢
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 2014-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-28
      相关资源
      最近更新 更多