【问题标题】:How to store image of fixed size in MySQL using PHP?如何使用 PHP 在 MySQL 中存储固定大小的图像?
【发布时间】: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,例如&lt;img src="profileuploads/someuniqid.jpg"&gt;
  • 您仍然需要存储文件名,以便将来创建该 URI。

标签: php mysql


【解决方案1】:
  1. move_uploaded_file($ff_TMP_NAME,$ffileDestination) 表示将上传的文件放入路径 $ffileDestination 的文件系统中
  2. $stmtt-&gt;bind_param("s",$ffileNameNew)这里是绑定保存的文件名
  3. $stmtt-&gt;execute()时,文件名存入数据库

现在您正试图显示图像对吗?

  1. 选择数据库中存储的文件名
  2. 获取存储在文件系统中的该图像的路径
  3. 显示图片

当你展示图片的时候,基本上有两种方式:

  1. 文件是公开的,这意味着你可以从像http://example.com/xxx.png这样的url获取图像。你可以简单地使用&lt;img src='http://example.com/xxx.png'&gt;
  2. 文件是私有的,你应该使用php读取文件内容并渲染出来。 (base64_encode 可能会有所帮助)
猜你喜欢
  • 2017-09-20
  • 2020-01-02
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
  • 2015-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多