我已经设法将代码下载到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文件内容的转储
答案 0 :(得分:0)
这可能是某种编码问题我尝试对数据库进/出数据进行base64编码/解码
还要确保源中没有空格,否则会破坏输出。
检查:
<-- Here
<?php
和
?>
<-- here
或更好仍然完全删除最终结束的php标记
答案 1 :(得分:0)
也许我的简单编码功能可以帮到你。由于@andrew说它很可能不起作用,因为你没有使用base64编码/解码
发送类似
的文件<input type="file" name="image" accept="image/*">
处理它
// Make sure the user uploaded a file
if (isset($_FILES['image']) && $_FILES['image']['size'] > 0) {
// Temporary file name stored on the server
$tmpName = $_FILES['image']['tmp_name'];
// Read the file
$fp = fopen($tmpName, 'r');
$data = fread($fp, filesize($tmpName));
$data = addslashes($data);
fclose($fp);
}
将$ data存储在db中,然后使用
$img=base64_encode($row['image_from_db']);
将$ img放入显示功能
// Return <img> if there is any provided.
function displayImage(&$link){
if(!empty($link)){
return "<img alt=\"Profile Picture\" src=\"data:image/*;charset=utf8;base64, $link \">";
}
else
{
return "<img alt=\"Profile Picture\" src='../img/nopicture.jpg'>";
}
}
如果您需要其他文件而不是图像,则需要更改输入accept =&#34; image / *&#34;以及适合您需求的显示功能。