base64 pdf缓存不会显示

时间:2016-10-12 15:24:21

标签: javascript php html base64

我有一个对象标签,它显示来自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>

在某些计算机上,当文件第一次加载时,它会显示它应该的样子。 然后它从缓存中加载&#34; (在chrome网络检查器中)并且对象不会呈现任何内容。 base64 from cache

如果我以隐身模式返回页面,它会再次有效(仅限第一次)。如果我从浏览器中清除缓存,则相同。

有没有人暗示可能导致这种情况的原因?

谢谢!

1 个答案:

答案 0 :(得分: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

?>

这就是我在“object”标签中呈现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>

希望能帮到你(和其他人)!