php - 通过 PHP MYSQL 强制下载的 blob 格式不正确

标签 php mysql blob

我已经设法将代码用于下载保存在 mysql 表中的中型 blob。该代码的工作原理是检索正确的文件,正确命名,为其提供正确的扩展名,然后浏览器强制下载它。

问题是当我尝试打开文件时出现错误。例如,如果它是一个 jpeg 文件,图像将不会显示。如果它是 pdf,我不会得到 pdf。我检查了文件大小,它似乎对应于存储的 Blob 文件大小。

我认为这是一个格式问题,但不知道如何更正它。任何帮助表示赞赏。我的代码是:

Front End:
<a href="data/docmgmt/get-docmgmt.php?id=<?php=$id;?>">Test</a>

BackEnd:
$doc_id = 24122565639274498;
$conn = new PDO("mysql:host=localhost;dbname=$dbname", $db->id, $db->pass); //connect to db
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);    //error modes                      
$stmt = $conn->prepare('SELECT content,type,name,size FROM docmgmt WHERE doc_id=:doc_id');
$stmt->bindParam(':doc_id', $doc_id, PDO::PARAM_INT);
$stmt->execute();               
$stmt->bindColumn(1, $lob, PDO::PARAM_LOB);
$stmt->bindColumn(2, $type, PDO::PARAM_STR, 256);
$stmt->bindColumn(3, $name, PDO::PARAM_STR, 256);
$stmt->bindColumn(4, $size, PDO::PARAM_INT);
$stmt->fetch(PDO::FETCH_BOUND);

header("Content-length: $size");
header("Content-type: $type");
header("Content-Disposition: attachment; filename=$name");
echo $lob;

检索到的 PNG 文件内容的屏幕转储

enter image description here

最佳答案

这可能是某种编码问题,我会尝试对进/出数据库的数据进行 base64 编码/解码

还要确保源代码中没有空格,否则会损坏输出。

检查:

<-- Here
<?php

?>
<-- here

或者更好的是完全删除最后的关闭 php 标签

关于php - 通过 PHP MYSQL 强制下载的 blob 格式不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31625486/

相关文章:

php - 用它在 php 中的当前值更新 MySql 值

php - 如何防止我的网站受到 XSS 注入(inject)?

angular - 使用 FileSaver 和 blob 将响应正文另存为文件

php - HTML/Apache/PHP 的 <Form> 标签中的 <Input> 标签数量是否有限制?

php-mysql电子邮件联系进口商

mysql - 蛋糕 3 : column of type JSON stores a NULL as string "null"

javascript - 在php中将数据保存到mysql数据库后,如何在按钮单击中切换选项卡?

c# - TransactionScope 内的 Azure Blob 存储上传

PHP sqlsrv 从数据库示例中插入/读取 blob(varbinary)字段

php - 如何通过RESTful Grails驱动的后端对Wordpress前端进行身份验证?