PHP: Image retrieval from MySQL Blob directly into

2019-02-11 13:18发布

问题:

I've stored my Images into (Medium) BLOB fields and want to retrieve them embedded within my PHP-generated web pages.

When I test retrieving the stored images using

header('Content-type: ' . $image['mime_type']);
echo $image['file_data'];

everything looks just fine.

However, I have not yet found a way to retrieve the image(s) cleanly into the middle of my documents. For example, using

$image  = $row['file_data'];
echo '<img src="data:image/jpeg;base64,'.$image['file_data'].'" alt="photo"><br>';

...or...

$im = imageCreateFromString($image);

I just wind up with a bunch of hexadecimal garbage on screen.

I intitially stored the Images using:

ob_start();
imagejpeg($resizedImage, null, 100);
$content = ob_get_contents();
ob_end_clean();
$sql = sprintf(
 "insert into images (filename, mime_type, file_size, file_data, event_id)
 values ('%s', '%s', %d, '%s',%d)",
 mysql_real_escape_string($fileName),
 mysql_real_escape_string($mimeType),
 $imageSize,
 mysql_real_escape_string($content),
 $eventID 
);
$result = $cn->query($sql);

Does anyone PLEASE have a working code snippet to successfully display the stored .jpg mid-file in the PHP output?

回答1:

echo '<img src="data:image/jpeg;base64,'.base64_encode($image['file_data']).'" alt="photo"><br>';

However, remember that old IE versions do not support this kind of inline images! Besides that, the browser cannot cache such an image except together with its containing HTML page.



回答2:

You should create some sort of "image server". You're already close to that. For example, create something like image.php that will get a image name and will generate it on the fly. So, for example, say you want to get somePic.jpg image. You can get it through:

image.php?name=somePic.jpg

<?php
header('Content-type: ' . $image['mime_type']);
echo $image['file_data'];
?>

Your tag:

<img src='image.php?name=somePic.jpg' />

Or more general:

echo "<img src='image.php?name={$image['filename']}' />"


回答3:

Why not just call your test page image.php, then have it called from the browser on the rendered page:

<img src="image.php?imageid=123" alt="photo" />