我已经设法将代码用于下载保存在 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 文件内容的屏幕转储
最佳答案
这可能是某种编码问题,我会尝试对进/出数据库的数据进行 base64 编码/解码
还要确保源代码中没有空格,否则会损坏输出。
检查:
<-- Here
<?php
和
?>
<-- here
或者更好的是完全删除最后的关闭 php 标签
关于php - 通过 PHP MYSQL 强制下载的 blob 格式不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31625486/