php - php无法在浏览器中查看下载的PDF文件
问题描述
我有一个下载媒体功能,可以下载所有类型的媒体文件。下面是代码
public function downloadMedia($file, $filename_direct = '', $extern = '', $exitHere = 1)
{
jimport('joomla.filesystem.file');
clearstatcache();
if (!$extern)
{
if (!JFile::exists($file))
{
return 2;
}
else
{
$len = filesize($file);
}
}
else
{
/* Return the size of a remote url or a local file specified by $url.
$thereturn specifies the unit returned (either bytes "", MiB "mb" or KiB
"kb"). */
$len = filesize($file);
}
$filename = basename($file);
$file_extension = strtolower(substr(strrchr($filename, "."), 1));
$ctype = $this->getMime($file_extension);
ob_end_clean();
// Needed for MS IE - otherwise content disposition is not used?
if (ini_get('zlib.output_compression'))
{
ini_set('zlib.output_compression', 'Off');
}
header("Cache-Control: public, must-revalidate");
header('Cache-Control: pre-check=0, post-check=0, max-age=0');
header("Expires: 0");
header("Content-Description: File Transfer");
header("Content-Type: " . $ctype);
header("Content-Length: " . (string) $len);
header('Content-Disposition: attachment; filename="' . $filename . '"');
// set_time_limit doesn't work in safe mode
if (!ini_get('safe_mode'))
{
@set_time_limit(0);
}
/*@readfile($file);
if ($exitHere == 1)
{
exit;
}*/
$fp = fopen($file, "r") ;
ob_clean();
flush();
while (!@feof($fp)) {
$buff = @fread($fp, $len);
print $buff;
}
exit;
}
现在的问题是,每当我下载 PDF 文件并单击下载的文件时,它都会在浏览器中显示错误,例如“无法加载 PDF 文档”。
只有当我在 adobe 中打开文件而不是在浏览器中打开它时,下载的 PDF 文件才能正确打开。
解决方案
推荐阅读
- vue.js - Vue devtools 刷新后停止
- c# - 如何使用视图模型中的对象列表在 MVC 中创建“创建”视图?
- reactjs - Typescript如何在通过道具传递时使功能成为可选
- java - dropwizard中的多个数据库
- python - 在将我的机器人部署到 heroku 时如何解决此错误?
- swift - 我们什么时候需要使用 JSONEncoder 和 JSONDecoder 和 UserDefaults
- firebase - 在 Flutter 的垂直 ScrollView 内的水平 ListView 中显示来自 Firestore 的数据
- c# - FileInfo.CopyTo 如何检测覆盖
- oracle - REST API 插入无法使用 node-oracledb
- matplotlib - Matplotlib 中的两个窗口(plt.figure)