我已成功将 pdf 文件上传到数据库,但现在当我尝试读取文件时,单击链接时出现“无法加载 PDF”问题。我检查了我的浏览器插件没有问题。
<?php
$con=mysqli_connect("localhost","root","");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
mysqli_select_db($con,"mahmood_faridi");
$query = "SELECT id, name FROM upload";
$result = mysqli_query($con,$query) or die('Error, query failed');
if(mysqli_num_rows($result)==0){
echo "Database is empty <br>";
}
else{
while(list($id, $name) = mysqli_fetch_array($result)){
echo "<a href=\"download.php?id=\$id\">$name</a><br>";
}
}
if(isset($_GET['id'])){
$id = $_GET['id'];
$query = "SELECT content FROM upload WHERE id = '$id'";
$result = mysqli_query($con,$query) or die('Error, query failed');
$row = mysqli_fetch_row($result);
$content=$row['content'];
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="' . $content . '"');
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');
ob_clean();
ob_flush ();
@readfile($content);
}
mysqli_close($con);
?>
这是“保存文件”代码:
<?php
$con=mysqli_connect("localhost","root","");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
if(isset($_POST['upload']) && $_FILES['userfile']['size'] > 0)
{
$fileName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];
$fp = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = mysqli_real_escape_string($con,$content);
fclose($fp);
if(!get_magic_quotes_gpc())
{
$fileName = mysqli_real_escape_string($con,$fileName);
}
mysqli_select_db($con,"mahmood_faridi");
$query = "INSERT INTO upload (name, size, type, content ) ".
"VALUES ('$fileName', '$fileSize', '$fileType', '$content')";
mysqli_query($con,$query) or die('Error, query failed');
mysqli_close($con);
echo "<br>File $fileName uploaded<br>";
}
else
echo "File not uploaded"
?>
最佳答案
我本来打算将此作为评论发布,但它有点太长了。
将文件保存到数据库时,尝试对内容进行base64_encoding,然后在读取时对内容进行base64_decoding。以文本形式查看 PDF 时看起来很奇怪,并且数据库的排序规则会影响其保存方式,甚至会影响保存的内容。如果一个字符发生变化,您的 PDF 就会损坏。
还要确保错误报告已关闭,并且 PDF 旁边没有输出空格,这也会显示为文件已损坏。
我还会考虑将您拥有的功能拆分到不同的文件中。看起来所有内容都在一个文件中,这可能会导致在您不完全期望时发生输出,再次损坏下载。
作为替代方案,您可以不将 PDF 保存到磁盘并将位置存储在数据库中吗?然后您可以根据需要读取文件并将其输出,这样就不会出现数据库中的 PDF 内容被损坏的问题。如果您采用此方法,请确保为它们指定唯一的名称,因为可能会使用相同的名称上传两个文件,并且您可能会意外覆盖其中一个。
关于php - 如何读取保存在mysql数据库中的pdf文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35189545/