gpt4 book ai didi

php - BLOB 图像返回损坏的图像

转载 作者:太空宇宙 更新时间:2023-11-04 16:00:45 25 4
gpt4 key购买 nike

我在 SO 上找到了很多对其他人有效但对我无效的解决方案!正确方向的指导将不胜感激。

注意:我知道很多人可能不喜欢将图像存储在 blob 中,但对于我的特定应用程序来说,这就足够了。

上传页面上的 HTML 代码片段(在包含其他数据的表单中):

<div class="row">
<div class="col-md-6">
<div class="form-group">
<label>Summary Image</label>
<br /><input name="summaryImage" id="imgInp1" type="file" accept="image/*" onchange="Prev1(this)" />
<br /><img id="imgPrev1" src="" alt="Summary Image Preview" style="width:99%; height: 400px; margin-top:10px;" />
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label>Article Image</label>
<br /><input name="articleImage" id="imgInp2" type="file" accept="image/*" onchange="Prev2(this)" />
<br /><img id="imgPrev2" src="" alt="Article Image Preview" style="width:99%; height: 400px; margin-top:10px;" />
</div>
</div>
</div>

上传页面上的 PHP 代码片段

//Summary Image
$summaryimage = $_FILES['summaryImage'];
if(is_uploaded_file($_FILES['summaryImage']['tmp_name']) && getimagesize($_FILES['summaryImage']['tmp_name']) != false)
{
// Gather image info
$size = getimagesize($_FILES['summaryImage']['tmp_name']);
// Assign variables
$type = $size['mime'];
$imgfp = fopen($_FILES['summaryImage']['tmp_name'], 'rb');
$size = $size[3];
$name = $_FILES['summaryImage']['name'];
$summaryimagesize = $_FILES['summaryImage']['size'];
$maxsize = 15728640;


// Check image file size
if($summaryimagesize < $maxsize ) {
//Image size checks out, insert blob into database
mysql_query("UPDATE projects
SET summaryimage='$summaryimage', summaryimagesize='$summaryimagesize'
WHERE job='$job'") or die (mysql_error());;

} else if($summaryimagesize > $maxsize) {
// Image file size too big
header("LOCATION: /projects.php?message=imagesize");
}
} else {
// Any other error
header("LOCATION: /projects.php?message=imageformat");
}

//Article Image
$articleimage = $_FILES['articleImage'];
if(is_uploaded_file($_FILES['articleImage']['tmp_name']) &&
getimagesize($_FILES['articleImage']['tmp_name']) != false)
{
// Gather image info
$size = getimagesize($_FILES['articleImage']['tmp_name']);
// Assign variables
$type = $size['mime'];
$imgfp = fopen($_FILES['articleImage']['tmp_name'], 'rb');
$size = $size[3];
$name = $_FILES['articleImage']['name'];
$articleimagesize = $_FILES['articleImage']['size'];
$maxsize = 15728640;

// Check image file size
if($articleimagesize < $maxsize ) {
//Image size checks out, insert blob into database
mysql_query("UPDATE projects SET articleimage='$articleimage', articleimagesize='$articleimagesize' WHERE job='$job'") or die (mysql_error());;

} else if($articleimagesize > $maxsize) {
// Image file size too big
header("LOCATION: /projects.php?message=imagesize");
}
} else {
// Any other error
header("LOCATION: /projects.php?message=imageformat");
}

header("LOCATION: /projects.php?message=success");

}

数据库将 blob 存储为 longblob 类型,没问题: projects table

我用来编码和显示图像的代码:

<?php echo '<img src="data:image/jpeg;base64,' . base64_encode( $post['summaryimage'] ) . '" />'; ?>

页面显示的内容: Broken Image

当我右键单击 > 复制图像位置时:

data:image/jpeg;base64,QXJyYXk=

最佳答案

QXJyYXk=array 的 base64,因此您存储的是数组数据而不是图像。

解决方法是获取图像的内容并将其存储起来:

 $summaryimage = file_get_contents($_FILES['summaryImage']['tmp_name']);

因为您没有使用准备好的语句,所以您应该转义引号:

 $summaryimage = addslashes(file_get_contents($_FILES['summaryImage']['tmp_name']));

显示时你应该在编码之前再次删除它们:

base64_encode(stripslashes($post['summaryimage']))

关于php - BLOB 图像返回损坏的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41858362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com