php - 显示存储在 MySQL 数据库 PHP 中的 PDF 文件

标签 php mysql web-applications adobe-reader

我试图在用户请求时在浏览器中显示存储在 mysql 数据库中的 PDF 文件。

MySQL表的结构:

CREATE TABLE `file` (
`id` Int Unsigned Not Null Auto_Increment,
`name` VarChar(255) Not Null Default 'Untitled.txt',
`mime` VarChar(50) Not Null Default 'text/plain',
`size` BigInt Unsigned Not Null Default 0,
`data` MediumBlob Not Null,
`created` DateTime Not Null,
PRIMARY KEY (`id`)
)

php代码:

$query = "
            SELECT `type`, `name`, `size`, `data`, `mime`
            FROM `file`
            WHERE `id` = {$id}";
        $result = $dbLink->query($query);
        if($result) {
            // Make sure the result is valid
            if($result->num_rows == 1) {
            // Get the row
                $row = mysqli_fetch_assoc($result);
                // Print headers
                header('Accept-Ranges: bytes');
                header('Content-Transfer-Encoding: binary');
                header("Content-Type: ".$row['mime']);
                header("Content-Length: ".$row['size']);
                header("Content-Disposition: inline; filename=".$row['name']);
                echo $row['data'];
            }
        }

将文件保存到数据库的代码:

if(isset($_FILES['uploaded_file'])) {
    // Make sure the file was sent without errors
    if($_FILES['uploaded_file']['error'] == 0) {
        // Connect to the database
        $dbLink = new mysqli('localhost', 'REDACTED',"REDACTED", 'pdfs');
        if(mysqli_connect_errno()) {
            die("MySQL connection failed: ".mysqli_connect_error());
        }

        // get all required data
        $name = $dbLink->real_escape_string($_FILES['uploaded_file']['name']);
        $type = $dbLink->real_escape_string($_FILES['uploaded_file']['type']);
        $data = $dbLink->real_escape_string(file_get_contents($_FILES  ['uploaded_file']['name']));
        $size = intval($_FILES['uploaded_file']['size']);

        // Create the SQL query
        $query = "
            INSERT INTO `file` (
                `name`, `type`, `size`, `data`, `created`
            )
            VALUES (
                '{$name}', '{$type}', {$size}, '{$data}', NOW()
            )";

        // Execute the query
        $result = $dbLink->query($query);

        // Check if it was successfull
        if($result) {
            echo 'Success! Your file was successfully added!';
        }
        else {
            echo 'Error! Failed to insert the file'
               . "<pre>{$dbLink->error}</pre>";
        }

但是,当我尝试查看 pdf 时,adobe reader 开始加载,然后我收到此错误消息:

the file is damaged and could not be repaired. am i doing something wrong?

最佳答案

老实说,我一点也不喜欢这种方式。

亲吻

保持简短

无论您想做什么,都有更好的方法。

  1. 如果安全是你的问题,你有 .htaccess 和 access 角色
  2. 如果文件处理是您使用 PHP 的问题。
  3. 如果 protected 下载是一个问题,那么再次结合 PHP 及其 session 处理,您可以做到这一点。
  4. 如果查看是您使用的浏览器的问题。
  5. 如果你想强制下载文件,那么PHP的header标签就足够了。

关于php - 显示存储在 MySQL 数据库 PHP 中的 PDF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9709960/

相关文章:

php - MYSQL/PHP 计算出现次数

javascript - 有没有办法在 JavaScript 中隐藏我的 api? (从php中提取它?)

php - 如何限制 SimpleXML 结果的总数?

mysql - 有人能帮我解释为什么这段代码在 Mysql 中执行时在 c_orders (c_custkey, c_count) 处失败

java - 使用票证服务器生成主 ID?

php - Lithium PHP 框架 - 播种数据库?

mysql - 如何解决MySQL死锁

php - 如何在 phpBB 论坛上创建与已保存的用户名和密码相同的用户名和密码

javascript - PDF在线数字签名

tomcat - 如果配置不完整,则阻止(tomcat)Web 应用程序启动