【发布时间】:2015-07-25 10:26:40
【问题描述】:
我已经设法将代码下载到保存在 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 文件内容的屏幕转储
【问题讨论】:
-
我认为这个答案可能对你有帮助stackoverflow.com/questions/20556773/…
-
谢谢 我试过 echo base64_encode($lob);在最后一行并添加了出口;还是不走运。
-
不,我不是这个意思,我的意思是你应该在将文件写入数据库之前对文件进行base64编码。即:
$file = base64_encode($_FILES['input_name'][tmp_name]);(虽然不是字面意思,显然你仍然应该做一些消毒)。然后你就可以echo base64_decode($lob);