【发布时间】:2019-07-10 09:43:50
【问题描述】:
我已经阅读了大量关于 stackoverflow 和 google 的关于文件上传和直接在/从 MYSQL BLOB 列中显示的文章。我不需要在任何地方上传文件,因为我的整个项目只涉及一个文件,那就是用户要更新的徽标文件。 虽然我想用 Codeigniter Upload 库来做这些事情,但我无法完成代码,所以我尝试了简单的 PHP 解决方案,但它也没有奏效。
下面是我的代码。
上传表单代码:
<?php echo form_open_multipart('UpdateCompanyInfo'); ?>
<div class="form-group">
<label>Logo</label>
<input type="file" class="form-control" name="logo">
[200 px (width)x200px (height)]
</div>
<div class="box-footer">
<button type="submit" class="btn btn-primary">Update Logo</button>
</div>
<?php echo form_close(); ?>
上传代码:
$check = getimagesize($_FILES["logo"]["tmp_name"]);
if($check !== false)
{
if($check[0]=="200" && $check[1]=="200" )
{
$image = $_FILES['logo']['tmp_name'];
$imageFileType = strtolower(pathinfo($_FILES['logo']['name'],PATHINFO_EXTENSION));
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg") {
return '<div class="alert alert-danger">'.$imageFileType.' Logo file of only jpg/png/jpeg type is acceptable.</div>';
}
$imgContent = addslashes(file_get_contents($image));
if($this->db->update("company", array('logo'=>$imgContent)))
{
return '<div class="alert alert-success">Logo has been updated successfully.</div>';
}
else
{
return '<div class="alert alert-danger">Error 101. Failed to update the logo.</div>';
}
}
else
return '<div class="alert alert-danger">Logo file of only 200px X 200px is acceptable.</div>';
}
在视图中显示图像的代码
echo '<img src="data:image/png;base64,'.base64_encode($companyinfo[0]->logo).'"/>';
我上传的是png文件,所以我使用了data:image/png
检查视图中的图像元素时,我得到以下输出:
<img src="data:image/png;base64,iVBORw0KGgpcMFwwXDAN ....... v6/IDhCwtLWDE56vdo6CwCC07dMeva1dhgIGnEBikg7xODG0Pq+m61z8bC4Vqpzxpq6d8BhQK7Q1+rte/oyhK61mIAoGRznxWpiYmb8jaleunKEotrSaXy1Xb1lnxXhXvSAGgKtXBetZJOQEAIQkBAQAhCQEAIQkBACEJA8P7xP2GoiDrA7B2BXDBcMFwwXDBJRU5ErkJggg==">
互联网上的所有文章都显示了这个解决方案,但为什么它在我的最后不起作用?
【问题讨论】:
-
我只是在猜测,因为我从未将图像存储到数据库中,但是如果您将
addslashes()应用于图像的内容,数据不会因为图像数据而损坏因为你改变了它? -
PHP 或 MySQL 是否返回任何错误?
-
@SpacePhoenix 只是一个图标,在图像未渲染时出现在浏览器中。
-
@dnFer 我从标记的答案中得到了解决方案并使用了它,stackoverflow.com/questions/17717506/…
-
@dnFer 我看到 addlashes() 无处不在,但你的假设有效。删除 addlashes() 时显示徽标
标签: php mysql image file-upload blob