Я сделал php-страницу, где вы можете загружать изображения / файлы, которые будут сохранены в моей базе данных как тип «mediumblob». Теперь я застрял и не могу понять, как отображать эти изображения из базы данных. Я написал в кепках, где хотел бы распечатать изображения.
<?php $dbLink = new mysqli('127.0.0.1', 'root', '', 'test'); if(mysqli_connect_errno()) { die("MySQL connection failed: ". mysqli_connect_error()); } $sql = 'SELECT `id`, `name`, `mime`, `size`, `created`, `data` FROM `file`'; $result = $dbLink->query($sql); if($result) { // Kolla om det finns några filer i databasen if($result->num_rows == 0) { echo '<p>There are no files in the database</p>'; } else { echo '<table width="100%"> <tr> <td><b>Name</b></td> <td><b>Mime/type</b></td> <td><b>Size (bytes)</b></td> <td><b>Created</b></td> <td><b>Image</b></td> </tr>'; while($row = $result->fetch_assoc()) { echo " <tr> <td>{$row['name']}</td> <td>{$row['mime']}</td> <td>{$row['size']}</td> <td>{$row['created']}</td> //THIS IS WHERE I'M SUPPOSED TO PRINT OUT THE IMAGES </tr>"; } echo '</table>'; } } else { echo 'Error! SQL query failed:'; echo "<pre>{$dbLink->error}</pre>"; } echo '<p>Click <a href="index.html">here</a> to go back</p>'; // Close the mysql connection $dbLink->close(); ?>
Это моя таблица в базе данных:
CREATE TABLE `file` ( `id` Int Unsigned Not Null Auto_Increment, `name` VarChar(255) Not Null Default 'Untitled.txt', `mime` VarChar(50) Not Null Default 'text/plain', `size` BigInt Unsigned Not Null Default 0, `data` MediumBlob Not Null, `created` DateTime Not Null, PRIMARY KEY (`id`) )
Очень благодарен за любую помощь!
Если BLOB содержит двоичные данные изображения, вам нужно будет взять содержимое и, возможно, записать его в файл, в результате получится изображение.
file_put_contents($path."path/to/image/".$row['name'], base64_decode($row['image']));
Затем вызовите его нормально. Конечно .. убедитесь, что файл существует до его написания 🙂
Кроме того, вы можете написать сценарий для прямого вывода изображения, как показано ниже.
Для этого есть два подхода:
Вы можете использовать встроенную кодировку base64. Вы можете сделать это так, чтобы ваши изображения были JPEG:
echo '<td><img src="data:image/jpeg;base64,'.base64_encode($image);.' /></td>';
Следующим вариантом будет создание PHP-файла с именем image.php, который принимает идентификатор изображения в качестве параметра, а затем выводит изображение. Тогда ваш HTML будет выглядеть так:
<td><img src="image.php?id={$row['id']}"></td>
Во всяком случае, есть много ответов на этот вопрос. Возможно, вы посмотрите на это, например: мне нужна моя страница PHP, чтобы показать мой образ BLOB из базы данных mysql
Попробуй это;
header('Pragma: public'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Content-Transfer-Encoding: binary'); header('Content-length: '.$row['size']); header('Content-Type: '.$row['mime']); header('Content-Disposition: attachment; filename='.$row['name']); echo '<img src="'.$row['data'].'" />';