我正在尝试在浏览器中查看存储在数据库中的文件(即excel表格/ pdf /图像)。
我已经编写了用于从数据库下载文件的代码,并且该代码正在运行,但是我想在浏览器中显示它。
这是代码:
<?php require_once('Connections/databasestudents.php'); ?> <?php $id = $_GET['id']; // ID of entry you wish to view. To use this enter "view.php?id=x" where x is the entry you wish to view. $query = "SELECT fileContent, filetype FROM file where id = $id"; //Find the file, pull the filecontents and the filetype $result = MYSQL_QUERY($query); // run the query if($row=mysql_fetch_row($result)) // pull the first row of the result into an array(there will only be one) { $data = $row[0]; // First bit is the data $type = $row[1]; // second is the filename Header( "Content-type: $type"); // Send the header of the approptiate file type, if it's' a image you want it to show as one :) print $data; // Send the data. } else // the id was invalid { echo "invalid id"; } ?>
发生的情况是,view.php已下载且未查看任何内容。
有什么建议?
根据您的代码,$row[1]是“文件名”。Content type标头应改为包含 内容类型 ,即文件mime类型,例如:
$row[1]
header('Content-type: application/pdf');
如果要添加文件名:
header('Content-type: application/pdf'); header('Content-Disposition: attachment; filename='.$row[1]); print $data;
确保$data文件的内容,例如可以从readfile()获取的内容。
$data
在手册上阅读更多信息:http : //php.net/manual/en/function.readfile.php
请记住,尽管浏览器可以轻松查看PDF和图像,但我认为Excel需要一些 临时 插件。
一个更完整的例子 右出的手册 ,让你更彻底的了解(并非所有的标题是必要的,你应该相应改变别人对你的代码):
header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.basename($file)); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); ob_clean(); flush(); readfile($file); exit;