小编典典

在浏览器上使用php查看存储在数据库中的文件

sql

我正在尝试在浏览器中查看存储在数据库中的文件(即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已下载且未查看任何内容。

有什么建议?


阅读 192

收藏
2021-05-16

共1个答案

小编典典

根据您的代码,$row[1]是“文件名”。Content type标头应改为包含 内容类型 ,即文件mime类型,例如:

header('Content-type: application/pdf');

如果要添加文件名:

header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename='.$row[1]);
print $data;

确保$data文件的内容,例如可以从readfile()获取的内容。

在手册上阅读更多信息: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;
2021-05-16