我正在为客户关系管理构建一个内部应用程序。
这个应用程序相当直接。它收集客户机信息并存储起来供以后使用。
收集到的信息中有一部分是客户照片识别的图像。我将这个图像存储在mysql数据库中它自己的表中。
我一直在寻找一种方法,显示在一个小的预览窗口沿客户信息(姓名,地址等)的图像。我所发现的可能的解决方案在这一点上是非常旧和贬值,或指显示一个图像,其中只有文件的url存储在数据库中,图像本身保存在服务器上的文件夹。
我目前拥有的代码没有在html中显示任何内容,只是空白。在此之前,我确实有一个版本显示了blob中的原始数据,但它正在破坏所有内容,所以我没有保留它来显示给您。
我的问题是,有没有人能给我指出一个资源,专门是关于这种类型的信息是如何被网络浏览器使用的,以及如何适当地组织它以供显示?或者,如果由于某种原因这一切都是错误的,有人能告诉我一个更好的方法来实现这一点的文档吗?我没有这方面的经验,有时由于缺乏正确的术语,在寻找答案时会遇到困难。
这张table看起来像:
TABLE NAME = "photoid"
row 1 = "id" (auto increment)
row 2 = "name" (varchar)
row 3 = "mime" (varchar)
row 4 = "size" (bigint)
row 5 = "data" (medium blob)
row 6 = "created" (datetime)
row 7 = "client_id" (varchar)
html:
<img width="400" height="200" src="<?php include ('client_display_photoid.php');?>" />
php:
<?php include ('connect.php');?>
<?php
$client_id = htmlspecialchars($_POST['client_id']);
// prepare stmt, bind param, execute
$stmt = $conn->prepare("SELECT mime, name, size, data FROM photoid WHERE client_id = ?");
$stmt->bind_param("s", $client_id);
$stmt->execute();
// bind results
$stmt->bind_result($mime, $name, $size, $data);
// Print headers
header("Content-Type: $mime");
header("Content-Length: $size");
header("Content-Disposition: attachment; filename = $name");
// Print data
echo $data;
?>
<?php include ('disconnect.php');?>
编辑1:在查看了评论之后,我能够通过删除打开的php标记来消除显示的“空白”。我还查看了提供的链接,并将代码更改如下。
html格式:
<img width="300px" height="150px" src="data:image/jpeg;base64,<?php echo base64_encode( $data ); ?>" />
PHP:
<?php
include ('connect.php');
$stmt = $conn->prepare("SELECT data FROM photoid WHERE client_id = ?");
$stmt->bind_param("s", $client_id);
$stmt->execute();
$stmt->bind_result($data);
include ('disconnect.php');
?>
以下是我尝试显示图像时显示的内容:
<img width="300px" height="150px" src="data:image/jpeg;base64," />
编辑2:
我尝试了以下代码。。。html格式:
<img src='client_display_photoid.php?client_id=182' />
PHP:
<?php
include ('connect.php');
$sql='select `mime`,`data` from `photoid` where `client_id` = ?';
$stmt=$conn->prepare( $sql );
if( $stmt ){
$stmt->bind_param('s', $client_id );
$result=$stmt->execute();
$stmt->store_result();
if( $result && $stmt->num_rows==1 ){
$stmt->bind_result( $mime, $data );
$stmt->fetch();
$stmt->close();
$data=base64_decode( $data );
#$mime=image_type_to_mime_type( $mime );
$oImg = imagecreatefromstring( $data );
switch( $mime ){
case IMAGETYPE_JPEG:
header( 'Content-Type: image/jpeg' );
imagejpeg( $oImg );
break;
case IMAGETYPE_PNG:
header( 'Content-Type: image/png' );
imagepng( $oImg );
break;
case IMAGETYPE_GIF:
header( 'Content-Type: image/gif' );
imagegif( $oImg );
break;
}
imagedestroy( $oImg );
}
}
include ('disconnect.php');
?>
我在浏览器中看到的是:
<img src='client_display_photoid.php?client_id=182' />
2条答案
按热度按时间p8h8hvxi1#
下面的内容应该有助于您对其进行排序—db将base64编码的数据存储为blob,并使用php和XML动态创建图像
imagecreatefromstring
. 下面的代码在测试中为我工作,所以您应该能够小心地修改它以在您的环境中工作。一个区别是在db中使用整数mimetype而不是字符串。上面的$mime是一个整数,但使用
image_type_to_mime_type
返回的值将产生mime类型字符串。。它只是意味着你必须修改这个位来处理字符串而不是int。在html中,您可以这样称呼:
即:
zvms9eto2#
今天我把这一点弄得一团糟,发现将php改成下面的格式,就可以在html中使用一个简单的php include来显示所需的图像。
看起来while语句就是其中的关键。我还使用了所提供的一些建议,并利用了在php代码中回显html的优势。
非常感谢大家的评论和帮助。
PHP: