использование тега <img>для вызова PHP-скрипта для отображения закодированного изображения, полученного из базы данных - PullRequest
0 голосов
/ 28 апреля 2018

Мой PHP-скрипт для хранения закодированных данных изображения в таблице базы данных в виде типа «blob»:

include './libraries/LIB_mysql.php'; # library for using the 'insert()' function at the end
$imageFilePath = "./pythonProgrammingProgram.PNG";
$imageFileRead = file_get_contents($imageFilePath); # == �PNG  IHDR�A ... uY�IEND�B`� (... and so on)
$imageEncode = base64_encode($imageFileRead); # iVBORw0KGgoAAAA (... and so on)
$data_array['image_id'] = 3;
$data_array['image_file'] = $imageEncode;
$table = 'images';
insert(DATABASE, $table, $data_array);

Данные изображения, похоже, правильно хранятся в базе данных:

mysql> select * from images;
| image_id | image_file
|        3 | iVBORw0KGgoAAAA # (... and so on)

Я бы хотел, чтобы изображение отображалось на странице HTML с помощью тега img, который вызывает скрипт PHP: <img src="./imageDisplay.php?pictureID=3">. PHP-скрипт imageDisplay.php, извлекающий данные изображения из базы данных и отображающий декодированное изображение:

header("Content-type: image/png");
include('./libraries/LIB_mysql.php'); # for using exe_sql() function
$image_id = $_GET['pictureID']; # == 3 -> corresponds to the value in the database !!
$sql = "SELECT image_file FROM images WHERE image_id = '" . $image_id . "'"; # $image_id";
list($img) = exe_sql(DATABASE, $sql); # $img contains the decoded data: == �PNG  IHDR�A ... uY�IEND�B`� (... and so on)
echo base64_decode($img);
exit;

При загрузке HTML-файла на локальный хост я вижу сломанное изображение. В Firefox под Сетью -> Ответ я вижу:

Name: imageDisplay.php
Dimensions: 0 × 0
MIME Type: image/png

Я думаю, передача данных изображения не сработала, но я не могу понять, почему. Данные декодированного изображения в base64_decode($img) такие же, как в $imageFileRead до кодирования, поэтому я предполагаю, что операции с базой данных не проблема, а где-то в echo base64_decode($img); или <img src="./imageDisplay.php?pictureID=3">. Нашел это (ТАК вопрос) [ PHP - вызов функции из img src и (это другое) [ Изображение не может быть отображено, поскольку оно содержит ошибки , но все еще не может увидеть, как исправить это: - (

Ответы [ 3 ]

0 голосов
/ 29 апреля 2018
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file" accept="png/jpeg/jpg/image"><br><br>
<input type="submit" value="submit" name="submit">
</form>
<?php 
 if(isset($_POST['submit'])){`enter code here`
    $name       = $_FILES['file']['name'];  `enter code here`
    $temp_name  = $_FILES['file']['tmp_name'];  
     // $allowed = array("pdf" => "pdf");
     // var_dump($name,$temp_name);
    if(isset($name)){
        if(!empty($name)){      
            $location = './uploads1/';      
            if(move_uploaded_file($temp_name, $location.$name)){
            //var_dump($temp_name,$location.$name);
                echo 'File uploaded successfully';

                $con=mysqli_connect("localhost","root","");
echo "connect";
if(!$con)
{
die("not connect");
}
mysqli_select_db($con,"dstpurse"); 


$query="INSERT INTO `image_upload`(`name`,`path`) VALUES('$name','$location')";

$result=mysqli_query($con,$query);
if($result)
{
echo "inserted";
}
else
{
echo "not inserted";
}

            }
        }       
    }  else {
        echo 'You should select a file to upload !!';
    }
    $query1 = "SELECT * FROM `image_upload`";
$result1 = mysqli_query($con,$query1) or die("query failed:".mysqli_error());
while($row=mysqli_fetch_array($result1))
{
var_dump($name); 

echo "<a href=".$location.$name.">dowenload</a>";

}


}

?>
0 голосов
/ 29 июня 2018
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file" accept="png/jpeg/jpg/image"><br><br>
<input type="submit" value="submit" name="submit">
</form>
<?php 
 if(isset($_POST['submit'])){`enter code here`
    $name       = $_FILES['file']['name'];  `enter code here`
    $temp_name  = $_FILES['file']['tmp_name'];  
     // $allowed = array("pdf" => "pdf");
     // var_dump($name,$temp_name);
    if(isset($name)){
        if(!empty($name)){      
            $location = './uploads1/';      
            if(move_uploaded_file($temp_name, $location.$name)){
            //var_dump($temp_name,$location.$name);
                echo 'File uploaded successfully';

                $con=mysqli_connect("localhost","root","");
echo "connect";
if(!$con)
{
die("not connect");
}
mysqli_select_db($con,"dstpurse"); 


$query="INSERT INTO `image_upload`(`name`,`path`) VALUES('$name','$location')";

$result=mysqli_query($con,$query);
if($result)
{
echo "inserted";
}
else
{
echo "not inserted";
}

            }
        }       
    }  else {
        echo 'You should select a file to upload !!';
    }
    $query1 = "SELECT * FROM `image_upload`";
$result1 = mysqli_query($con,$query1) or die("query failed:".mysqli_error());
while($row=mysqli_fetch_array($result1))
{
var_dump($name); 

echo "<a href=".$location.$name.">dowenload</a>";

}


}

?>
0 голосов
/ 28 апреля 2018

Я бы серьезно пересмотрел хранение изображений в базе данных. Лучший способ - сохранить файл и указать путь к изображению в базе данных. Если это абсолютно необходимо, попробуйте этот код для сохранения:

$name = $_FILES['file']['name'];
$target_dir = "upload/";
$target_file = $target_dir . basename($_FILES["file"]["name"]);

// Select file type
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

// Valid file extensions
$extensions_arr = array("jpg","jpeg","png","gif");

// Check extension
if( in_array($imageFileType,$extensions_arr) ){

// Insert record
$query = "insert into images(name) values('".$name."')";
mysqli_query($con,$query);

// Upload file
move_uploaded_file($_FILES['file']['tmp_name'],$target_dir.$name);

И этот код для отображения

$sql = "select name from images where id=1";
$result = mysqli_query($con,$sql);
$row = mysqli_fetch_array($result);

$image = $row['name'];
$image_src = "upload/".$image;

?>
<img src='<?php echo $image_src;  ?>' >

Этот код взят из этого примера - http://makitweb.com/upload-and-store-an-image-in-the-database-with-php/#base64

Вам нужно будет изменить его для работы с вашим кодом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...