Как я могу создать PHP-скрипт, который позволит мне загрузить файл из базы данных в MySQL. У меня есть следующая таблица с именами files
которых загруженный файл сохраняется в поле на основе BLOB
.
+-------+----------+----------+------------+-------------------+--------+ |fileID | fileName | fileType | fileSize |fileData | userID | +-------+----------+----------+------------+-------------------+--------+ | 1 | file1 | JPEG | 211258 |[BLOB - 206.3 KiB] | 1 | | 2 | file2 | PNG | 211258 |[BLOB - 201.3 KiB] | 1 | +-------+----------+----------+------------+-------------------+--------+
Я не могу найти способ вызвать файл для загрузки, и каждый раз, когда я пытаюсь, я получаю двоичные данные файла, такие как случайные числа и символы.
Я пробовал этот запрос, где параметры передаются (fileID, fileName, fileType) на страницу download.php:
$id = mysqli_real_escape_string($link, $_GET['fileID']); $name = mysqli_real_escape_string($link, $_GET['fileName']); $type = mysqli_real_escape_string($link, $_GET['fileType']); $SELECT = "SELECT * FROM files WHERE fileID = $id AND fileName = $name "; $result = mysqli_query($SELECT, $link); $result = mysqli_fetch_assoc($result); header("Content-type: $type"); echo $result['fileData'];
Но это приводит к пустой странице без вывода.
Как загрузить, например, файл1 в виде файла JPEG на мой жесткий диск?
Это наиболее распространенная проблема, с которой сталкиваются при работе с файлом blob, из вашего примера видно, что вы сохраняете «fileType» в качестве расширений файлов (например, jpg для изображений, pdf для файлов pdf и т. Д.), Вы загружаете , Но вместо этого вы можете сохранить тип файла в качестве типа содержимого Mime. Предположим, что если вы загрузите образ jpeg, тип mime будет сохранен в «fileType» как «image / jpeg». Аналогично для pdf он будет храниться как «application / pdf». Я разработал такой код, чтобы загрузить BLOB-файл из базы данных, здесь я предположил, что файлы уже загружены в созданную вами таблицу базы данных
Таблица базы данных "загружает"
| 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; $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); //echo $id . $file . $type . $size; 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 и скачайте здесь Blob-upload-download
вы можете использовать имя сеанса и сообщения и содержимое файла для загрузки страницы
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;