Это наиболее распространенная проблема, возникающая при работе с блобом. Из вашего примера, я вижу, что вы сохраняете «fileType» в качестве расширений файлов (например, «jpg» для изображений, «pdf» для файлов PDF и т. Д.), Вы загружаете. Но вместо этого вы можете сохранить тип файла в качестве типа содержимого MIME.
Предположим, если вы загрузили jpeg-изображение - тип MIME будет сохранен в «fileType» в качестве «image / jpeg». Аналогично для pdf он будет храниться как «application / pdf». Я разработал такой код, чтобы загрузить файл blob из базы данных. Я собираюсь предположить, что файлы уже загружены в созданную вами таблицу базы данных.
Таблица базы данных «uploads»
| fileID | fileName | fileType | fileSize | fileData | userID |
download.php
<?php
$connection = mysqli_connect("localhost","root"," ",your_database)
or die('Database Connection Failed');
mysqli_set_charset($connection,'utf-8');
$id = 1;
// Use a prepared statement in production to avoid SQL injection;
// we can get away with this here because we're the only ones who
// are going to use this script.
$query = "SELECT * " ."FROM uploads WHERE userID = '$id'";
$result = mysqli_query($connection,$query)
or die('Error, query failed');
list($id, $file, $type, $size,$content) = mysqli_fetch_array($result);
header("Content-length: $size");
header("Content-type: $type");
header("Content-Disposition: attachment; filename=$file");
ob_clean();
flush();
echo $content;
mysqli_close($connection);
exit;
?>
Здесь вы можете найти полный код blob-upload здесь .
вы можете использовать имя сеанса и почтового файла и содержимое файла для загрузки страницы
session_start();
$_SESSION['filename'] = $filename
$_SESSION['file'] = $file
<a href="download.php">echo "Download File"</a>
, а в файле download.php этот код
session_start();
$filename = $_SESSION['filename'];
$file = $_SESSION['file'];
header("Content-Disposition: attachment; filename=$filename");
ob_clean();
flush();
echo $file;