繁体   English   中英

使用 PHP 将图像上传到 MySQL (blob)

[英]Uploading images to MySQL (blob) with PHP

出于安全原因,我决定将用户个人资料图像上传到数据库,而不仅仅是一个文件夹并上传图像地址,这将是一个好主意。

我以前从未在后端处理过文件上传,但是从各种来源阅读了这一点,我相信我做的一切都是正确的。 但是,没有上传有用的二进制数据。

在 php.ini

文件上传=开启

在前端

 <form enctype="multipart/form-data" method="post" autocomplete="on" action="upload/"> <p> <input type="file" id="avatar" name="avatar" accept="image/png, image/jpeg" required /> <label for="avatar">*Profile photo</label> </p> <p class="submitter two-thirds columns"> <input type="submit" value="Apply" /> </p> </form>

在后端

if(isset($_SESSION['id']))
    $UserID = $_SESSION['id'];
else exit(1);

if (!empty($_FILES['avatar'])){
    $photo = fopen($_FILES['avatar']["tmp_name"], 'rb');
    $photo_mime = $_FILES['avatar']["type"]; 
}
else exit(1);

$values_data = array(
    $UserID,
    $photo,
    $photo_mime,
);


$sql = "INSERT INTO `user`
    (
        UserID,
        photo,
        photo_mime
    )
    VALUES
    (
        :UserID,
        :photo,
        :photo_mime
    )
    ON DUPLICATE KEY UPDATE
        photo = :photo,
        photo_mime = :photo_mime
    ";

$sth = $dbh->prepare($sql);


$sth->bindValue(':UserID', $values_data[0]);
$sth->bindValue(':photo', $values_data[1]);
$sth->bindValue(':photo_mime', $values_data[2]);
$sth->execute();

并且数据库确实得到了一些信息

mysql phpmyadmin

然而,这些图像二进制文件都是 1KB。 看看里面他们有这样的数据

资源 ID #13

所以二进制文件被弄乱了或被丢弃在某个地方......但是在哪里?

fopen()不返回文件的内容。 它返回一个文件指针资源,然后您可以将其传递给fread()之类的东西来获取内容。

就像是:

$handler = fopen($_FILES['avatar']["tmp_name"], 'r');
$file = fread($handler, filesize($_FILES['avatar']["tmp_name"]));
fclose($handler);

更简单的方法是使用file_get_contents()

$file = file_get_contents($_FILES['avatar']["tmp_name"]);

这将在一行中为您提供内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM