我已成功将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"
?>
答案 0 :(得分:0)
我打算将此作为评论发布,但它有点太长了。
将文件保存到数据库时,请尝试对内容进行base64_encoding,然后在读取时对其进行base64_decoding。在文本中查看时,PDF看起来很奇怪,数据库的整理会影响它保存的方式,甚至会影响保存的内容。如果一个字符发生更改,则表示PDF格式已损坏。
还要确保关闭错误报告,并确保PDF旁边没有输出空格,这也会显示为文件已损坏。
我还考虑将您拥有的功能拆分为不同的文件。看起来一切都在那里的一个文件中,当你没有完全期待它时会导致输出,再次破坏下载。
作为替代方法,您是否可以将PDF保存到磁盘并将位置存储在数据库中。然后,您可以根据需要读取文件并输出,然后在数据库中没有PDF内容损坏的问题。如果沿着这条路线前进,请确保给它们指定唯一的名称,因为可以使用相同的名称上传两个文件,您可能会意外覆盖一个。
答案 1 :(得分:0)
Oooooops!
我们都集中在编码和数据库存储,但问题是另一个!
输出PDF时,您可以从数据库中获取内容,但是您可以通过以下方式将此内容发送给用户:
@readfile($content);
readfile($content)
使用filepath $content
输出文件的内容,但在$content
中没有任何文件路径!
您只需在
中更改此行代码即可echo $content;
并且您的脚本将有效。
(了解更多关于readfile
)