无法将 pdf 文件上传到 mysql 数据库并使用 PHP 检索它?
Posted
技术标签:
【中文标题】无法将 pdf 文件上传到 mysql 数据库并使用 PHP 检索它?【英文标题】:Failed to upload pdf file into mysql databse and retrieve it using PHP? 【发布时间】:2019-04-27 19:43:51 【问题描述】:我正在尝试使用 mysql 和 php 将 pdf 文件上传到数据库,但只有 jpeg/png 等图像存储在数据库中。我未能将 pdf 文件上传到数据库并检索它。这是我的带有表单的 html 代码-
<form id="form" name="form" onsubmit="return validate()" action="http://localhost:81/wordpress/wp-content/themes/themify-ultra/submit.php" enctype="multipart/form-data" method="POST">
<div class="form-row">
<div class="name">Name</div>
<div class="value">
<div class="input-group">
<input class="input--style-5" type="text" name="name" required>
</div>
</div>
</div>
<div class="form-row">
<div class="name">Email</div>
<div class="value">
<div class="input-group">
<input class="input--style-5" type="email" name="email" required>
</div>
</div>
</div>
<div class="form-row">
<div class="name">Phone</div>
<div class="value">
<div class="input-group">
<input class="input--style-5" type="number" name="contact" required>
</div>
</div>
</div>
<div class="form-row">
<div class="name">Upload Your Resume</div>
<div class="value">
<div class="input-group">
<input class="input--style-5" type="file" name="myfile">
</div>
</div>
</div>
<div>
<button class="btn" name="btn" type="submit">Submit</button>
</div>
</form>
验证函数如下-
<script>
function validate()
var name = document.forms["form"]["name"];
var email = document.forms["form"]["email"];
var phone = document.forms["form"]["contact"];
var resume = document.forms["form"]["myfile"];
if (name.value == "")
window.alert("Please enter your name.");
name.focus();
return false;
if (email.value == "")
window.alert("Please enter a valid e-mail address.");
email.focus();
return false;
if (email.value.indexOf("@", 0) < 0)
window.alert("Please enter a valid e-mail address.");
email.focus();
return false;
if (email.value.indexOf(".", 0) < 0)
window.alert("Please enter a valid e-mail address.");
email.focus();
return false;
if (phone.value == "")
window.alert("Please enter your telephone number.");
phone.focus();
return false;
if(resume.value=="")
window.alert("Please upload your resume.");
resume.focus();
return false;
return true;
</script>
将数据上传到数据库的PHP代码是这样的-
<?php
$conn = new PDO('mysql:host=localhost;port=3306;dbname=test',
'root',
'',
array(PDO::ATTR_PERSISTENT => true));
if (!$conn)
die("Connection failed: " . mysqli_connect_error());
echo "Connected successfully";
if(isset($_POST['btn']))
$name2 = $_POST['name'];
$email2 = $_POST['email'];
$contact2 = $_POST['contact'];
$allowedExts = array("pdf");
$name=$_FILES['myfile']['name'];
$type=$_FILES['myfile']['type'];
$data=file_get_contents($_FILES['myfile']['tmp_name']);
$data = addslashes($data);
$query = "INSERT INTO wp_form (name,email,phone_number,file_name,type,data,description) VALUES (?,?,?,?,?,?,NOW())";
$result = $conn->prepare($query);
$result->execute(array($name2,$email2,$contact2,$name,$type,$data));
header("Location: https://www.example.com/thankyou");
?>
PHP从数据库中获取数据是这样的-
<!DOCTYPE html>
<html>
<head>
<title></title>
<!DOCTYPE html>
<html>
<head>
<title>Catalog</title>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<!-- jQuery library -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!-- Latest compiled javascript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
</body>
</html>
<?php
$conn = new PDO('mysql:host=localhost;port=3306;dbname=test',
'root',
'',
array(PDO::ATTR_PERSISTENT => true));
if (!$conn)
die("Connection failed: " . mysqli_connect_error());
$query = "SELECT * from wp_form";
$result = $conn->prepare($query);
$result->execute();
echo "<table border='1' cellpadding='0' cellspacing='0'>
<tr height='50'>
<td align='center' width='150'><b>S.No</b></td>
<td align='center' width='150'><b>Name</b></td>
<td align='center' width='300'><b>Email</b></td>
<td align='center' width='150'><b>Phone Number</b></td>
<td align='center' width='150'><b>Resume</b></td>
<td align='center' width='150'><b>Description</b></td>
</tr></table>";
while ($row=$result->fetch())
echo "<table border='1' cellpadding='0' cellspacing='0' ><tr height='50'>
<td align='center' width='150'>".$row['id']."</td>
<td align='center' width='150'>".$row['name']."</td>
<td align='center' width='300'>".$row['email']."</td>
<td align='center' width='150'>".$row['phone_number']."</td>
<td align='center' width='150'><a target='_blank' href='http://localhost:81/wordpress/wp-content/themes/themify-ultra/view.php?id=".$row['id']."'>".$row['file_name']." </a></td>
<td align='center' width='150'>".$row['description']."</td>
</tr>
</table>";
?>
图像存储在数据库中,但是当我尝试上传 pdf 文件时,它不起作用。任何人都可以告诉我哪里出错了。
【问题讨论】:
请粘贴上面validate()
的内容。
对不起,我忘记粘贴了。现在,你可以看到它了。
数据库存储失败,是不是pdf文件上传到服务器了?
我想将它上传到数据库中,然后我想像现在一样检索 jpeg/png 等图像。
您将其上传到服务器的磁盘空间,然后将该图像文件/网址存储到数据库中。
【参考方案1】:
问题,
-
要存储文件内容的列的大小和数据类型是什么?您不能以较小的长度使用较大的内容。有时,这是真正的问题,而不是代码本身。
为什么不将文件内容转换为十六进制然后保存到数据库中呢?喜欢:
$data=file_get_contents($_FILES['myfile']['tmp_name']);
$hexa = bin2hex($data);
。然后,您可以在使用 PHP 中的文件流检索存储的十六进制后再次创建文件。
希望它会有所帮助。
【讨论】:
您的文件是否超过 5mb?也许这就是文件没有上传的原因之一?我认为你应该修改你的 php.ini 以允许更大的文件。请参阅***.com/questions/2184513/…。或者如果您知道如何使用 .htaccess,也可以为您的文件上传问题提供很好的支持。 是的,我已将数据类型更改为 LongBlob。它有效。以上是关于无法将 pdf 文件上传到 mysql 数据库并使用 PHP 检索它?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter:如何将pdf文件上传到firebase存储?