使用 PHP 从数据库下载“blob”类型文件。文件已损坏,无法查看文件内容

Posted

技术标签:

【中文标题】使用 PHP 从数据库下载“blob”类型文件。文件已损坏,无法查看文件内容【英文标题】:Downloading 'blob' type file from database with PHP. Files are corrupted, unable to see the files' content 【发布时间】:2021-12-12 03:12:59 【问题描述】:

我尝试使用此代码从我的数据库中下载文件,但是,当我尝试打开文件时,出现以下错误:

下载文件类型“图像”时:

下载文件类型“docx”时:

php代码:

<?php
        include_once 'dbconfig.php';
        if (isset($_GET['id'])) 
            $id = $_GET['id'];
            $query = "SELECT * FROM files_data WHERE id = '$id'";
            $result = mysqli_query($connection,$query) or die('Error, query failed');
            list($id, $file, $type, $size,$content) = mysqli_fetch_array($result);
            header("Content-length: $size");
            header("Content-type: $type");
            header("Content-Disposition: attachment; filename=$file");
            $content = stripslashes($content);
            echo file_get_contents($content);
            exit;
        
    ?>

数据库:

Word 文档的存储类型为:“application/vnd.openxmlformats-officedocument.wordprocessingml.document”(在屏幕截图中不可见)。我相信这是正确的

【问题讨论】:

请edit这个问题输入图像中的文本,以便可以在所有设备上阅读、引用、编辑和通过搜索找到它。就目前而言,your image makes it hard to answer your question or for people with related issues to find your question。请参阅formatting documentation 以获取在不借助图像的情况下使您的文本看起来很漂亮的提示。 【参考方案1】:

我在尝试一些不同的代码时解决了这个错误:

<?php require_once('dbconfig.php'); ?>
<?php
   $query = "SELECT name, type, size, content from files_data WHERE id='2'";

   $result = $connection->query($query);
   $row = $result->fetch_assoc();
   $size = $row['size'];
   $type = $row['type'];
   $name =$row['name'];
   $fileContent = $row['content'];

   header("Content-length: $size");
   header("Content-type: $type");
   header("Content-Disposition: attachment; filename=$name");
   echo $fileContent;
   mysql_close();
?>

另外,我仍然认为我以前的代码很好,也许我遇到了与这里报告的相同的问题,答案是:Downloading jpg,doc,ppt files with php are corrupted

【讨论】:

以上是关于使用 PHP 从数据库下载“blob”类型文件。文件已损坏,无法查看文件内容的主要内容,如果未能解决你的问题,请参考以下文章

下载文件时在文件内容中获取类型 [object object],而不是使用 angular 7 获取 blob

Azure PHP SDK:在单个 zip 文件中下载容器的所有 blob

PHP / MySQL - 显示来自blob的图像[重复]

从 mysql 数据库中检索为 blob 图像时图像损坏

从 Azure Blob 存储下载文件

java blob 文件上传下载