我真的很难让我的应用程序在用户点击链接时打开pdf文件。
到目前为止,锚标记重定向到一个发送以下标题的页面:
$filename='./pdf/jobs/pdffile.pdf;
$url_download = BASE_URL . RELATIVE_PATH . $filename;
header("Content-type:application/pdf");
header("Content-Disposition:inline;filename='$filename");
readfile("downloaded.pdf");
这似乎不起作用,过去有人成功地解决过这个问题吗?
7条答案
按热度按时间btqmn9zl1#
w3schools上的示例2显示了您试图实现的目标。
也要记住,
需要注意的是,必须在发送任何实际输出之前调用header()(在PHP 4及更高版本中,可以使用输出缓冲来解决这个问题)
5jvtdoz22#
iq0todco3#
在您的代码中需要考虑一些事情。
首先,正确地写那些头,你永远不会看到任何服务器发送
Content-type:application/pdf
,头是Content-Type: application/pdf
,有空格,第一个字母大写等等。Content-Disposition
中的文件名只是文件名,而不是它的完整路径,尽管我不知道它是否是强制性的,但这个名称是用"
Package 的,而不是'
。Content-Disposition: inline
表示文件应该显示,而不是下载。请改用attachment
。此外,请将文件扩展名设置为大写,以使其与某些移动的设备兼容。(更新:很肯定只有黑莓有这个问题,但世界已经从那些移动,所以这可能不再是一个问题)
综上所述,您的代码看起来应该更像这样:
从技术上讲
Content-Length
是可选的,但是如果你想让用户能够跟踪下载进度,并检测下载结束前是否中断,它是很重要的。使用它时,你必须确保你不会发送任何文件数据。确保在<?php
之前或?>
之后绝对没有任何内容,甚至没有空行。zzlelutf4#
我最近遇到了同样的问题,这帮助了我:
我找到了这个答案here
iklwldmw5#
你能试试这个吗,
readfile
需要完整的文件路径。zrfyljdw6#
您需要定义文件的大小...
而这句话是错的:
header(“内容处置:内联;文件名=“$文件名”);
你搞砸了配额。
klsxnrf17#