【发布时间】:2020-06-16 20:08:11
【问题描述】:
我正在尝试将来自用户的图像存储在数据库中,但插入后它始终显示图像的大小为 26B,即使图像大小以 Kb 为单位。 我已经在 MySQL 中使用 longBlob 来存储它。 这是我的代码
<input type="file" name="profile_picture" id="imgupload" accept=".jpg,.png,.jpeg">
// for uploading image
$ff_NAME = $_FILES['profile_picture']['name'];
$ff_TMP_NAME = $_FILES['profile_picture']['tmp_name'];
$ff_SIZE = $_FILES['profile_picture']['size'];
$ff_ERROR = $_FILES['profile_picture']['error'];
$ff_TYPE = $_FILES['profile_picture']['type'];
$ffileExt = explode('.',$ff_NAME);
$ffileActualExtention = strtolower(end($ffileExt));
$fallowed = array('png','jpeg','jpg');
if(in_array($ffileActualExtention,$fallowed))
{
if($ff_ERROR===0)
{
if($ff_SIZE<500000)
{
$ffileNameNew = uniqid('',true)."".$ffileActualExtention;
$ffileDestination = 'profileuploads/'.$ffileNameNew;
move_uploaded_file($ff_TMP_NAME,$ffileDestination);
}
else
{
echo 'File size must be less than 500 kb.';
}
}
else
{echo "Error in uploading the files";}
}
else
{echo "Only 'png','jpeg','jpg' are allowed";}
插入查询声明:
$query = "INSERT INTO detail (`f_profile_picture`) VALUES (?)";
$stmtt = $conn->prepare($query);//prepared statement method
$stmtt->bind_param("s",$ffileNameNew);//binding a parameter to question mark
$stmtt->execute();
if($stmtt->affected_rows > 0)
{
echo("success");
}
else
{
echo("failed");
}
【问题讨论】:
-
您不是在插入文件,而是在插入文件的名称。您将文件存储在文件系统中(在
profileuploads下) -
我应该怎么做才能将图像存储在数据库中以及文件夹 profileuploads 下??
-
您为什么要拥有 2 个副本?通常将图像存储在文件系统上是正确的做法。见stackoverflow.com/questions/3748/…
-
如果文件存储在 HTML 树中,您只需为其提供 URI,例如
<img src="profileuploads/someuniqid.jpg"> -
您仍然需要存储文件名,以便将来创建该 URI。