【发布时间】:2018-06-11 20:22:30
【问题描述】:
所以我需要一些关于我正在编写的 php 脚本的帮助,该脚本通过 PHP 脚本将 PDF 加载到新选项卡中。我这样做是为了确保只有在用户登录并具有指向它的链接时才能访问 PDF,否则 PDF 的父目录中的 .htaccess 会阻止访问。
我可以使用以下代码阅读 PDF:
$file = '../path-to-file.pdf';
$filename = 'filename.pdf';
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="' . $filename . '"');
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');
@readfile($file);
然后将其结果传递给如下所示的 AJAX 函数,该函数会生成一个新选项卡并将响应抛出到它上面:
$.ajax({
url: '../includes/function.projects.php?view-media=' + item,
success: function(data) {
$(window.open().document.body).html(data);
}
})
这一切都很顺利,只有当新标签打开时,因为我正在将响应直接写入文档 HTML,所以我得到一个充满这样文本的屏幕:
%PDF-1.5 %���� 2 0 obj << /Linearized 1 /L 17007 /H [ 687 126 ] /O 6 /E 16732 /N 1 /T 16731 >>
所以我的问题很简单;有没有人尝试过这样做?如果是这样,是否有任何我应该使用的库/我缺少的标头等
我已经在这里看到了这个问题,但我无法得到人们列出的答案,所以我没有想法。
任何帮助将不胜感激,提前致谢!
【问题讨论】:
-
这只是一个猜测,尽管我已经做了类似的事情来保护图像。我不认为你可以简单地通过
window.open.document.body传递这样的数据,因为你没有发送任何标题。为什么不直接以您的function.projects.php?view-media=' + item作为 url 打开一个窗口并在其顶部进行安全检查? -
嗯...虽然看看这个:stackoverflow.com/questions/10516463/…
-
这是个好主意!我已经编写了一个函数来检查会话,这样会很好并且易于实现。我刚刚开始研究的另一种方法是加载一个预先构建的页面,该页面通过 GET 变量传递 PDF 的 url,然后 JS 库接管它并将 PDF 加载到页面上......我喜欢不过你的想法更好:)
-
祝你好运!不过请查看其他链接 - 也许您需要的只是将其转换为二进制并在您的字符串前面加上
data:application/pdf;base64,,您当前的计划就可以了。 -
是的,伙计,我会继续修补,然后一旦我有一些可以顺利运行的东西,我就会将其添加为答案
标签: php jquery ajax .htaccess pdf