【问题标题】:base64 pdf cached won't show缓存的base64 pdf不会显示
【发布时间】:2017-02-21 11:35:39
【问题描述】:

我有一个对象标签,它显示来自 base64 字符串的 pdf,如下所示:

<object id="pdfViewer" data="data:application/pdf;base64,BASE64STRING" wmode="transparent" type="application/pdf" title="document" width="100%" height="800" internalinstanceid="60" style="height: 401px;"></object>

在某些计算机上,当文件首次加载时,它会按应有的方式显示。 然后它“从缓存中加载”(在 chrome 网络检查器中)并且对象不渲染任何东西。

如果我以隐身模式返回页面,它会再次工作(仅第一次)。如果我从浏览器清除缓存也是一样。

有没有人暗示这可能是什么原因?

谢谢!

【问题讨论】:

    标签: javascript php html base64


    【解决方案1】:

    嗯,我的回答来得有点晚,因为我最近也遇到了同样的问题。

    我想显示来自服务器的 pdf 文件。

    由于包含 pdf 的文件夹受 htaccess 保护,因此我执行了一个 ajax 请求,该请求将返回编码为 base64 的文件内容。 Chrome 会缓存它,它只会在第一次呈现,而任何其他时间只会呈现空白......在 Safari 或 Firefox 上它工作得很好,但我也必须为 Chrome 修复它。

    所以,这就是我所做的:

    这是我的 ajax 文件的一部分,它创建 pdf 的 Base64 编码内容并“回显”它:

    <?php
    
    // ....some -irrelevant to the case- code here
    
    $output_doc = /path/to/myDoc.pdf;
    $file = file_get_contents($output_doc);
    //echo base64_encode($file); //here caching was working and problem existed
    echo base64_encode($file."?".time()); //here I eliminated caching by adding a "time" parameter
    
    ?>
    

    这就是我在“对象”标签中呈现 pdf 文件内容的方式:

    $.ajax({
        type:'post',
        url:'/ajax/file_get.ajax.php',
        data:'file=/path/to/myDoc.pdf',
        success:function(response){
            $('#pdf_object').attr('data','data:application/pdf;base64,'+response);
        }
    });
    

    最后,这是我的 html 中显示文件的部分:

    <object type="application/pdf" id="pdf_object" style="width:100%; min-height:400px; height:100%;"></object>
    

    希望对您(和其他人)有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-03
      • 2013-05-27
      • 2015-01-04
      • 2016-11-30
      • 1970-01-01
      • 2014-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多