首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在检索到数据库时压缩blob图像?

问如何在检索到数据库时压缩blob图像?
EN

Stack Overflow用户
提问于 2019-10-06 02:04:07
回答 1查看 679关注 0票数 1

我正在使用以下代码在我的数据库中上传图像:

代码语言:javascript
复制
<form>
<input type="file" name="image">
<input type="submit name="upload">
</form>
<?php
$mysqli=new mysqli("localhost","root","","mydb");

  if (isset($_POST['upload'])) {
    $photo = addslashes(file_get_contents($_FILES["image"]["tmp_name"]));

    $result=$mysqli->query("INSERT INTO images_tbl(image) VALUES('$photo')");

?>

并以这种方式检索照片:

代码语言:javascript
复制
<?php
$result=$mysqli->query("SELECT image FROM image_tbl");
    while ($test=mysqli_fetch_array($result)) {
        $getphoto = $test['image'];
    }
     echo'<img src="data:image/jpeg;base64,'.base64_encode($getphoto).'" style="width: 40px; 40px;" class="w3-round" draggable="false" /> ';
?>

当我上传一个大图片时,它会加载原始文件大小。我想优化我的网站。有没有办法在我检索图片到数据库时压缩图片,以便更快地加载到网站?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-06 07:04:50

我建议不要将图像添加到数据库中。至少不是MySQL数据库。相反,请尝试将图像存储在文件系统中,并且仅将文件系统路径存储在数据库中。考虑将文件重命名为唯一的长随机名称,并将其与原始文件名一起存储在数据库中。

使用PHP,您可以使用文件的原始名称提供服务:

代码语言:javascript
复制
header('Content-Type: image/jpeg');
header('Content-disposition: attachment; filename="'.$filenameOriginal."\n");
readfile($filenameStorage);

MySQL在处理文本方面非常出色,但二进制数据的大块却是另一回事。您还应该问问自己,通过将图像存储在数据库中,您获得了什么。

关于压缩。图像通常被很好地压缩,因此为了数据库存储而进一步压缩它们通常是不可行的。

我还强烈建议您查看MySQL的预准备语句。https://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php

这使您可以使用如下查询:

代码语言:javascript
复制
INSERT INTO images_tbl(image) VALUES(?)

问号表示一个变量,您将该变量作为带有单独函数的二进制文件传递给MySQL。这可以防止SQL注入攻击,而addslashes()肯定不会。

https://www.php.net/manual/en/mysqli-stmt.bind-param.php

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58250975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档